【題目】student.txt(GB2312 編碼)中存放了 20 個(gè)學(xué)生信息,包
括:學(xué)號(hào)、姓名、性別、籍貫、出生日期。這個(gè) 20 個(gè)同學(xué)沒(méi)有重名
的。編寫(xiě)一個(gè)學(xué)生信息管理小程序,實(shí)現(xiàn)下面的功能:
我們要從一個(gè)txt中讀取信息,多組學(xué)生的信息顯然易見(jiàn)要存放在一個(gè)結(jié)構(gòu)體數(shù)組中。把代碼全部放在一個(gè)源文件實(shí)在太過(guò)冗雜,這里我們可以把main函數(shù)放在一個(gè)源文件,功能實(shí)現(xiàn)放在別的源文件中,通過(guò)自己寫(xiě)一個(gè)頭文件進(jìn)行連接。那么這個(gè)結(jié)構(gòu)體的定義就要寫(xiě)在頭文件中,不過(guò)結(jié)構(gòu)體數(shù)組要定義在源文件中并在頭文件中聲明。一個(gè)而多次使用的系統(tǒng)我們可以使用一個(gè)do while結(jié)構(gòu)來(lái)實(shí)現(xiàn)。
cout<< "歡迎使用學(xué)生管信息管理系統(tǒng)"<< 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<< "輸入錯(cuò)誤,請(qǐng)重新輸入"<< endl;
break;
}
} while (a);
讀入text信息讀入 student.txt 的學(xué)生信息;要讀入一個(gè).txt類的文件儲(chǔ)存方式為ANSI格式
讀入文本文件分為5步
1.引頭文件
2.創(chuàng)建流對(duì)象
iftream file (ofstream–只寫(xiě)、ifstream–只讀、fstream–可讀可寫(xiě).)
3.打開(kāi)文件(并判斷文件是否成功打開(kāi))
file.open(“文件路徑”,打開(kāi)方式)
打開(kāi)方式分為
打開(kāi)方式 | 對(duì)應(yīng)操作 |
---|---|
ios::in | 為讀文件而打開(kāi) |
ios::out | 為寫(xiě)文件而打開(kāi) |
ios::ate | 文件尾為初始位置 |
ios::app | 追加內(nèi)容 |
ios::trunc | 重寫(xiě)文件 |
ios::binary | 二進(jìn)制形式讀寫(xiě) |
注:不同的打開(kāi)方式配合 | 操作符使用。
4讀數(shù)據(jù)
5關(guān)閉文件
//讀入文件
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++;
}
這里將數(shù)據(jù)先存在了一個(gè)char類的數(shù)組s之中,然后借用strcpy和strtok函數(shù)來(lái)實(shí)顯將數(shù)據(jù)存在一個(gè)結(jié)構(gòu)體數(shù)組之中;
這里拿一個(gè)total就可以確定學(xué)生人數(shù),而且會(huì)有妙用
統(tǒng)計(jì)并輸出這些學(xué)生中有多少男生,多少女生?因?yàn)閿?shù)據(jù)全拿一個(gè)結(jié)構(gòu)體以字符串的形式儲(chǔ)存,所以我們因該用strcmp函數(shù)來(lái)實(shí)現(xiàn)比較,然后創(chuàng)建兩個(gè)變量分別儲(chǔ)存男女的數(shù)量。
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;
}
統(tǒng)計(jì)并輸出這些學(xué)生有多少是 11 月份出生的?和上面那個(gè)差不多,沒(méi)什么好說(shuō)的
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<
其實(shí)這里我們可以先把月轉(zhuǎn)換出來(lái)
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 };
然后判斷哪個(gè)月就很隨便了
查找學(xué)生(要求)輸入一個(gè)姓名,查找 student 文件中是否存在他的信息,如果存
在,輸出出他(她)的信息,如果不存在,輸出“沒(méi)有這個(gè)同學(xué)的信
息”??梢远啻尾樵?,每次查詢結(jié)束詢問(wèn)用戶是否繼續(xù)查詢
多次查詢這不又do while
這里要注意的是在前面mian函數(shù)中輸入了一個(gè)數(shù)據(jù)并使用回車在這里若想使用getline必須先”清空“,我們可以使用getchar來(lái)清空。
void find(int total)
{int a = 0;
char mz[10] = {'0'};
do {cout<< "請(qǐng)輸入學(xué)生姓名"< 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<< "沒(méi)有這個(gè)同學(xué)的信息"<< endl;
}
cout<< "是否繼續(xù)查找"<< endl;
cout<< " 1:繼續(xù) "<< endl;
cout<< " 0:停止 "<< endl;
cin >>a;
}while (a);
}
修改籍貫宋羽玲同學(xué)的生源地錄入有誤,將她的籍貫改為江蘇省,并保存
到 student.txt 文件中
只要將存著宋羽玲信息的數(shù)組先找到然后將省會(huì)替換就行
void modify(int total)
{cout<< "要修改的學(xué)生名字"<< 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<< "沒(méi)有這個(gè)同學(xué)的信息"<< endl;
}
}
void change(int i,int total)
{cout<< "輸入要修改的值"<< endl;
cin.getline(stu[i].hometown, 10);
save(total);//保存修改后的數(shù)據(jù)
}
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();
}
這里改完后的存和讀差不多就不多贅述,
值得注意的是這里我希望將數(shù)據(jù)進(jìn)行一次更新,也就是重新讀一次,這里我們可以使用goto函數(shù),具體見(jiàn)上
在開(kāi)辟結(jié)構(gòu)體空間時(shí)我刻意多創(chuàng)造了一些,然后用total來(lái)卡著每次循環(huán)的次數(shù)。所以這里直接添加然后存一下,并重新讀取
void add(int total)
{int i = total;
cout<< "輸入學(xué)生編號(hào):";
getchar();
cin.getline(stu[i].number, 5);
cout<< endl<< "輸入學(xué)生名字:";
cin.getline(stu[i].name, 10);
cout<< endl<< "輸入學(xué)生性別:";
cin.getline(stu[i].sex, 6);
cout<< endl<< "輸入學(xué)生籍貫:";
cin.getline(stu[i].hometown, 10);
cout<< endl<< "輸入學(xué)生出生日期:";
cin.getline(stu[i].date, 12);
save(total + 1);
}
按照出生日期排升序輸出學(xué)生的學(xué)號(hào)、姓名和出生日期這里我將年月日分別取出,后使用了一種較為暴力的方式進(jìn)行處理。沒(méi)有技術(shù)含量,希望大佬可以給我一種比較新的寫(xiě)法
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<
完整代碼完整代碼
存學(xué)生的txt
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)題目:學(xué)生管理系統(tǒng)C++(初學(xué)者,不使用鏈表)-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://chinadenli.net/article34/pphse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、服務(wù)器托管、企業(yè)建站、移動(dòng)網(wǎng)站建設(shè)、虛擬主機(jī)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容