bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

學生管理系統C++(初學者,不使用鏈表)-創新互聯

學生管理系統
    • 題目
    • 主體思路
    • 讀入text信息
    • 統計并輸出這些學生中有多少男生,多少女生?
    • 統計并輸出這些學生有多少是 11 月份出生的?
    • 查找學生
    • 修改籍貫
    • 輸入新的學生信息
    • 按照出生日期排升序輸出學生的學號、姓名和出生日期
    • 完整代碼

成都創新互聯主營神木網站建設的網絡公司,主營網站建設方案,成都app開發,神木h5小程序定制開發搭建,神木網站營銷推廣歡迎神木等地區企業咨詢題目

【題目】student.txt(GB2312 編碼)中存放了 20 個學生信息,包
括:學號、姓名、性別、籍貫、出生日期。這個 20 個同學沒有重名
的。編寫一個學生信息管理小程序,實現下面的功能:

主體思路

我們要從一個txt中讀取信息,多組學生的信息顯然易見要存放在一個結構體數組中。把代碼全部放在一個源文件實在太過冗雜,這里我們可以把main函數放在一個源文件,功能實現放在別的源文件中,通過自己寫一個頭文件進行連接。那么這個結構體的定義就要寫在頭文件中,不過結構體數組要定義在源文件中并在頭文件中聲明。一個而多次使用的系統我們可以使用一個do while結構來實現。

cout<< "歡迎使用學生管信息管理系統"<< endl;
	int a;
	do
	{menu1();
		cin >>a;
		switch (a)
		{case 0:
			cout<< "歡迎下次使用"<< endl;
			file.close();
			break;
		case 1:
			sexclass(total);
			break;

		case 2:
			monthclass(total);
			break;
		case 3:
			find(total);
			break;

		case 4:
			modify(total);
			goto begine;
			break;
		case 5:
			add(total);
			goto begine;

			break;
		case 6:
			sort(total);
				break;

		default:
			cout<< "輸入錯誤,請重新輸入"<< endl;
			break;

		}
	} while (a);
	
讀入text信息

讀入 student.txt 的學生信息;要讀入一個.txt類的文件儲存方式為ANSI格式在這里插入圖片描述
讀入文本文件分為5步
1.引頭文件
2.創建流對象
iftream file (ofstream–只寫、ifstream–只讀、fstream–可讀可寫.)
3.打開文件(并判斷文件是否成功打開)
file.open(“文件路徑”,打開方式)
打開方式分為

打開方式對應操作
ios::in為讀文件而打開
ios::out為寫文件而打開
ios::ate文件尾為初始位置
ios::app追加內容
ios::trunc重寫文件
ios::binary二進制形式讀寫

注:不同的打開方式配合 | 操作符使用。
4讀數據
5關閉文件

//讀入文件
	fstream file;
	file.open("D:\\student.txt", ios::in);
	
	char s[200] = {0 };
	int total = 0;
	while (file.getline(s, 200))
	{strcpy(stu[total].number, strtok(s, "\t"));
		strcpy(stu[total].name, strtok(NULL, "\t"));
		strcpy(stu[total].sex, strtok(NULL, "\t"));
		strcpy(stu[total].hometown, strtok(NULL, "\t"));
		strcpy(stu[total].date, strtok(NULL, "\t"));

		total++;
 		
	}

這里將數據先存在了一個char類的數組s之中,然后借用strcpy和strtok函數來實顯將數據存在一個結構體數組之中;

這里拿一個total就可以確定學生人數,而且會有妙用

統計并輸出這些學生中有多少男生,多少女生?

因為數據全拿一個結構體以字符串的形式儲存,所以我們因該用strcmp函數來實現比較,然后創建兩個變量分別儲存男女的數量。

void sexclass(int total)
{int male = 0;
	int female = 0;
	int i = 0;
	char nan[6] = "男";
	char nv[6] = "女";
	for (i = 0; i< total; i++)
	{if (strcmp(stu[i].sex, nan)==0)
		{	male++;
		}
		if (strcmp(stu[i].sex, nv) == 0)
		{	female++;
		}
	}
	cout<< "男生有:"<< male<< "人"<< endl;
	cout<< "女生有:"<< female<< "人"<< endl;

}
統計并輸出這些學生有多少是 11 月份出生的?

和上面那個差不多,沒什么好說的

void monthclass(int total)
{int i = 0;
	int sum = 0;
	for (i = 0; i< total; i++)
	{if (stu[i].date[5] == '1' && stu[i].date[6] == '1')
			sum++;
	}
	cout<< sum<

其實這里我們可以先把月轉換出來

int month[50] = {0 };
	for (j = 0; j< total; j++)
	{int a = 0;
		for (a = 5; a< 7; a++)
		{	if (stu[j].date[a] != '/')
				month[j] = month[j] * 10 + (stu[j].date[a] - '0');
		}
	}
	int day[50] = {0 };

然后判斷哪個月就很隨便了

查找學生

(要求)輸入一個姓名,查找 student 文件中是否存在他的信息,如果存
在,輸出出他(她)的信息,如果不存在,輸出“沒有這個同學的信
息”。可以多次查詢,每次查詢結束詢問用戶是否繼續查詢
多次查詢這不又do while
這里要注意的是在前面mian函數中輸入了一個數據并使用回車在這里若想使用getline必須先”清空“,我們可以使用getchar來清空。

void find(int total)
{int a = 0;
	char mz[10] = {'0'};

	do {cout<< "請輸入學生姓名"<	if (strcmp(mz, stu[i].name) == 0)
			{		cout<< stu[i].number<< "\t"<< stu[i].name<< "\t"<< stu[i].sex<< "\t"<< stu[i].hometown<< "\t"<< stu[i].date<< endl;
				break;
			}
		}
		if (i == total)
		{	cout<< "沒有這個同學的信息"<< endl;
		}
		cout<< "是否繼續查找"<< endl;
		cout<< "   1:繼續    "<< endl;
		cout<< "   0:停止    "<< endl;

		cin >>a;
	}while (a);
}
修改籍貫

宋羽玲同學的生源地錄入有誤,將她的籍貫改為江蘇省,并保存
到 student.txt 文件中
只要將存著宋羽玲信息的數組先找到然后將省會替換就行

void   modify(int total)
{cout<< "要修改的學生名字"<< endl;
	int a = 0;
	char mz[10] = {'0' };
	getchar();//將輸入的回車換行吸收掉

	cin.getline(mz, 11);

	int i = 0;
	for (i = 0; i< total; i++)
	{if (strcmp(mz, stu[i].name) == 0)
		{	change(i,total);
			break;
		}
	}
	if (i == total)
	{cout<< "沒有這個同學的信息"<< endl;
	}
}
void change(int i,int total)
{cout<< "輸入要修改的值"<< endl;
	cin.getline(stu[i].hometown, 10);
	save(total);//保存修改后的數據
}
void save(int total)
{ofstream ofs;
	ofs.open("D:\\student.txt", ios::out);
	int i = 0;
	for (i = 0; i< total; i++)
	{ofs<< stu[i].number<< "\t";
		ofs<< stu[i].name<< "\t";
		ofs<< stu[i].sex<< "\t";
		ofs<< stu[i].hometown<< "\t";
		ofs<< stu[i].date<< endl;
	}
	ofs.close();
}

這里改完后的存和讀差不多就不多贅述,
值得注意的是這里我希望將數據進行一次更新,也就是重新讀一次,這里我們可以使用goto函數,具體見上

輸入新的學生信息

在開辟結構體空間時我刻意多創造了一些,然后用total來卡著每次循環的次數。所以這里直接添加然后存一下,并重新讀取

void add(int total)
{int i = total;
	cout<< "輸入學生編號:";
	getchar();
	cin.getline(stu[i].number, 5);
	cout<< endl<< "輸入學生名字:";
	cin.getline(stu[i].name, 10);
	cout<< endl<< "輸入學生性別:";
	cin.getline(stu[i].sex, 6);
	cout<< endl<< "輸入學生籍貫:";
	cin.getline(stu[i].hometown, 10);
	cout<< endl<< "輸入學生出生日期:";
	cin.getline(stu[i].date, 12);
	save(total + 1);


}
按照出生日期排升序輸出學生的學號、姓名和出生日期

這里我將年月日分別取出,后使用了一種較為暴力的方式進行處理。沒有技術含量,希望大佬可以給我一種比較新的寫法

void sort(int total)
{int year[50] = {0 };
	int j;
	int sum = 0;
	for (j = 0; j< total; j++)
	{int a = 0;
		for (a = 0; a< 4; a++)
		{	year[j] = year[j] * 10 + (stu[j].date[a] - '0');
		}
	}
	int month[50] = {0 };
	for (j = 0; j< total; j++)
	{int a = 0;
		for (a = 5; a< 7; a++)
		{	if (stu[j].date[a] != '/')
				month[j] = month[j] * 10 + (stu[j].date[a] - '0');
		}
	}
	int day[50] = {0 };
	for (j = 0; j< total; j++)
	{int a = 0;
		for (a = 7; a< 10; a++)
		{	if (stu[j].date[a] != '/' && stu[j].date[a] != '\0')
				day[j] = day[j] * 10 + (stu[j].date[a] - '0');
		}
	}
	int out[50] = {-1 };
	for (int a = 2003; a< 2005; a++)
	{for (int b = 1; b< 13; b++)
		{	for (int c = 1; c< 32; c++)
			{		for (int i = 0; i< total; i++)
				{if (year[i] == a && month[i] == b && day[i] == c)
					{cout<< stu[i].number<< "\t";
						cout<< stu[i].name<< "\t";
						cout<< stu[i].sex<< "\t";
						cout<< stu[i].hometown<< "\t";
						cout<< stu[i].date<< "\n";
						sum++;
					}
				}
			}
		}
	}
	//cout<< sum<
完整代碼

完整代碼
存學生的txt

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

網頁題目:學生管理系統C++(初學者,不使用鏈表)-創新互聯
標題網址:http://vcdvsql.cn/article34/pphse.html

成都網站建設公司_創新互聯,為您提供網站營銷服務器托管企業建站移動網站建設虛擬主機面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯