C++實(shí)現(xiàn)歌手比賽評(píng)分系統(tǒng)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)歌手比賽評(píng)分系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
(一) 需求和規(guī)格說(shuō)明
對(duì)一次歌手比賽的成績(jī)進(jìn)行管理,功能要求:
1、輸入每個(gè)選手的數(shù)據(jù)包括編號(hào)、姓名、十個(gè)評(píng)委的成績(jī),根據(jù)輸入計(jì)算
出總成績(jī)和平均成績(jī)(去掉最高分,去掉最低分)。
2、顯示主菜單如下:
1)輸入選手?jǐn)?shù)據(jù)
2)評(píng)委打分
3)成績(jī)排序(按平均分)
4)數(shù)據(jù)查詢
5)追加選手?jǐn)?shù)據(jù)
6)寫入數(shù)據(jù)文件
7)退出系統(tǒng)。
(二) 設(shè)計(jì)
根據(jù)上述需求,運(yùn)用鏈表存儲(chǔ)歌手的數(shù)據(jù),
1.數(shù)據(jù)的生成
歌手比賽選手首先我們需要歌手的基本信息,將每一位用戶的編號(hào)、姓名輸入系統(tǒng)中,然后進(jìn)行評(píng)委打分,之后我們對(duì)數(shù)據(jù)進(jìn)行處理分析,計(jì)算出總分和平均值,并以.txt文件的格式儲(chǔ)存起來(lái)。
2.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)
考慮到一個(gè)宿舍的人員是有限的,所以可以用鏈表進(jìn)行存儲(chǔ)。宿舍的人員設(shè)計(jì)為結(jié)構(gòu)體變量:
struct singer{undefined long lNum; char name[20]; float fScore[10]; float sum1, sum2, max, min, average; struct singer *pNext; };
其中包含選手編號(hào)、姓名、評(píng)委打分、總分(去除最高分和最低分)、最高分?jǐn)?shù)、最低分?jǐn)?shù)和平均分。然后我們?cè)谥骱瘮?shù)當(dāng)中定義一個(gè)結(jié)構(gòu)指針struct singer *spHead,作為鏈表的頭結(jié)點(diǎn),然后依次創(chuàng)建下一個(gè)結(jié)構(gòu)體對(duì)他們進(jìn)行遍歷輸入存儲(chǔ)。
3.功能的設(shè)計(jì)
函數(shù)功能的介紹
接收選手?jǐn)?shù)據(jù) :struct singer *CreatLiList(void);
評(píng)委打分:void score(struct singer *);
遍歷輸出數(shù)歌手?jǐn)?shù)據(jù):void TraverLiList(struct singer *);
追加選手?jǐn)?shù)據(jù):int AppendNode(struct singer *,long , char *, float*);
刪除數(shù)據(jù):int DeleteNode(struct singer *,long);
搜索數(shù)據(jù):int SearchNode(struct singer *,long );
退出系統(tǒng),刪除鏈表數(shù)據(jù):struct singer *ReleaseLiList(struct singer *);
鏈表數(shù)據(jù)根據(jù)平均分排序:struct singer* SortList(struct singer* );
將數(shù)據(jù)寫入文件:將數(shù)據(jù)寫入文件:void input(struct singer *);
(1)輸入選手?jǐn)?shù)據(jù)
用戶選擇功能1之后,我們對(duì)輸入的歌手的編號(hào)和姓名進(jìn)行統(tǒng)計(jì)存儲(chǔ),直到用戶輸入-1時(shí),我們默認(rèn)接受數(shù)據(jù)完畢,返回主程序功能頁(yè)面。
(2)評(píng)委打分
用戶選擇功能1之后,我們要根據(jù)用戶輸入的歌手的編號(hào)先對(duì)鏈表進(jìn)行查找,如果歌手編號(hào)輸入錯(cuò)誤,則提醒用戶重新輸入。找到該歌手之后,提醒用戶輸入的10評(píng)委的打分成績(jī),同時(shí)將他們存進(jìn)結(jié)構(gòu)體里面的數(shù)組,我們一邊接受一邊對(duì)成績(jī)進(jìn)行統(tǒng)計(jì),將總分最高分和最低分計(jì)算出來(lái),然后用總分減去最高分和最低分,然后除以8得到歌手的實(shí)際平均分?jǐn)?shù),這將作為我們下一步進(jìn)行排序的重要依據(jù)。
(3)成績(jī)排序(按平均分)
根據(jù)第二部統(tǒng)計(jì)出的平均分?jǐn)?shù),我們對(duì)鏈表數(shù)據(jù)進(jìn)行插入排序。
思路: 插入排序,顧名思義就是在兩個(gè)節(jié)點(diǎn)之間插入另一個(gè)節(jié)點(diǎn),并且保持序列是有序的。如果當(dāng)前要將節(jié)點(diǎn)cur插入到節(jié)點(diǎn)pre之后,我們只需要知道cur的前驅(qū)和插入位置(其實(shí)就是要插在哪個(gè)節(jié)點(diǎn)之后)就可以了。
(4)歌手?jǐn)?shù)據(jù)查詢
根據(jù)輸入編號(hào),對(duì)鏈表進(jìn)行遍歷循環(huán),直到找到相應(yīng)的歌手編號(hào),并對(duì)他的成績(jī)和個(gè)人信息進(jìn)行輸出。
(5)追加選手?jǐn)?shù)據(jù)
輸入待追加的選手編號(hào),我們將開辟在鏈表的最后開辟新的結(jié)構(gòu)體變量?jī)?nèi)存單元,并對(duì)選手的姓名和評(píng)分進(jìn)行錄入。
(6)寫入數(shù)據(jù)文件
我們對(duì)歌手信息進(jìn)行接受整理和排序之后將歌手的信息存入桌面下的txt文件中例如:C:\\Users\\fengling\\Desktop\\歌手比賽打分?jǐn)?shù)據(jù)統(tǒng)計(jì).txt。這樣可以在桌面打開,然后查看歌手排序好的信息。
(7)遍歷顯示數(shù)據(jù)
考慮到對(duì)歌手的信息可能進(jìn)行多次的修改,我們要檢測(cè)程序運(yùn)行的準(zhǔn)確性。所以每一步操作之后,都可以選擇功能7,對(duì)選手?jǐn)?shù)據(jù)進(jìn)行遍歷輸出。
(8)刪除選手?jǐn)?shù)據(jù)
考慮到對(duì)歌手可能退賽并沒(méi)有參加比賽也沒(méi)有相應(yīng)的分?jǐn)?shù),所以我們可以從鏈表中刪除該選手的編號(hào)和姓名信息,達(dá)到節(jié)約內(nèi)存、方便顯示管理的目的。
(9)退出系統(tǒng)
退出系統(tǒng)時(shí)對(duì)鏈表內(nèi)存進(jìn)行釋放,然后結(jié)束退出程序循環(huán)。
代碼
#include <iostream> #include <iomanip> #include <cstdlib> #include <fstream> #include <string> using namespace std; ? struct singer{ ?? ?long lNum; ?? ?char name[20]; ?? ?float fScore[10]; ?? ?float sum1, sum2, max, min, average; ?? ?struct singer *pNext; }; ? const int SIZE = ?sizeof(struct singer); ? //界面優(yōu)化 class Interface { private: ? ? int line;//操作數(shù)的行數(shù) ? ? string *name; ? ? static int nowline; public: ? ? void GetMessage(int line1,string *name1) ? ? { ? ? ? ? line=line1; ? ? ? ? name=new string [line]; ? ? ? ? name=name1; ? ? ? ?? ? ? } ? ? static void AddNowLine() ? ? { ? ? ? ? nowline++; ? ? } ? ? void ShowHead() ? ? { ? ? ? ? ShowSpace(); ? ? ? ? for(int i=0;i<50;i++) ? ? ? ? { ? ? ? ? ? ? if(i==0) ? ? ? ? ? ? ? ? cout<<"╔"; ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if(i==49) ? ? ? ? ? ? ? ? ? ? cout<<"╗"; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? cout<<"═"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? cout<<endl; ? ? ? ? AddNowLine(); ? ? } ? ? void ShowSpace() ? ? { ? ? ? ? for(int x=0;x<12;x++) ? ? ? ? ? ? cout<<" "; ? ? } ? ? void ShowOrderLine(int x) ? ? { ? ? ? ? int *number=new int[line]; ? ? ? ? for(int i=0,j=1;i<line;j++,i++) ? ? ? ? ? ? number[i]=j; ? ? ? ? int length; ? ? ? ? length=name[x].length(); ? ? ? ? ? cout<<"║"; ? ? ? ? cout<<number[x]<<'.'; ? ? ? ? for(int temp=0;temp<46-length;temp++)//46-length==48-length-2 ? ? ? ? ? ? cout<<"-"; ? ? ? ? cout<<name[x]; ? ? ? ? cout<<"║"; ? ? } ? ? void ShowSpaceLine() ? ? { ? ? ? ? cout<<"║"; ? ? ? ? for(int k=0;k<48;k++) ? ? ? ? ? ? cout<<" "; ? ? ? ? cout<<"║"<<endl; ? ? } ? ? void ShowEmptyLine() ? ? { ? ? ? ? if(nowline<14) ? ? ? ? { ? ? ? ? ? ? for(int i=nowline;i<=14;i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ShowSpace(); ? ? ? ? ? ? ? ? AddNowLine(); ? ? ? ? ? ? ? ? ShowSpaceLine(); ? ? ? ? ? ? ? ? AddNowLine(); ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? void ShowBody() ? ? { ? ? ? ? for(int i=0,j=1;i<line;i++,j++) ? ? ? ? { ? ? ? ? ? ? ShowSpace();//前排的空格 ? ? ? ? ? ? AddNowLine(); ? ? ? ? ? ? ShowOrderLine(i); ? ? ? ? ? ? ? cout<<endl; ? ? ? ? ? ? ? ShowSpace();//前排的空格 ? ? ? ? ? ? AddNowLine(); ? ? ? ? ? ? ShowSpaceLine(); ? ? ? ? } ? ? ? } ? ? void ShowReturn() ? ? { ? ? ? ? ShowSpace(); ? ? ? ? AddNowLine(); ? ? ? ? cout<<"║9."; ? ? ? ? for(int i=0;i<42;i++) ? ? ? ? ? ? cout<<"-"; ? ? ? ? cout<<"退出║"<<endl; ? ? } ? ? void ShowEndLine() ? ? { ? ? ? ? ShowSpace(); ? ? ? ? for(int i=0;i<50;i++) ? ? ? ? { ? ? ? ? ? ? if(i==0) ? ? ? ? ? ? ? ? cout<<"╚"; ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if(i==49) ? ? ? ? ? ? ? ? ? ? cout<<"╝"; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? cout<<"═"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? cout<<endl; ? ? ? ? AddNowLine(); ? ? } ? ? void ShowSurface() ? ? { ? ? ? ? ShowHead(); ? ? ? ? ShowBody(); ? ? ? ? ShowEmptyLine(); ? ? ? ? ShowReturn(); ? ? ? ? ShowEndLine(); ? ? } }; ? int Interface::nowline=0; ? //接收選手?jǐn)?shù)據(jù)? struct singer *CreatLiList(void); struct singer *CreatLiList(void) { ?? ?struct singer *spHead,*spPre,*spCur; ?? ?long lv; ?? ?spPre = new struct singer; ?? ?//spPre ?= (struct singer *)malloc(SIZE);//頭結(jié)點(diǎn) ?? ?if (spPre == NULL){ ?? ??? ?return NULL; ?? ?} ?? ?spHead = spPre; ?? ?spHead -> pNext = NULL; ?? ? ?? ?do{ ?? ??? ?cout << "請(qǐng)輸入歌手編號(hào):"; ?? ??? ?cin >> lv; ?? ??? ?if (lv != -1){ ?? ??? ??? ?spCur = new struct singer; ?? ??? ??? ?//spCur = (struct singer *)malloc(SIZE); ?? ??? ??? ?spCur -> lNum = lv; ?? ??? ??? ?spCur -> sum1 = 0; ?? ??? ??? ?getchar(); ?? ??? ??? ?cout << "請(qǐng)輸入姓名:";? ?? ??? ??? ?cin.getline(spCur -> name, 20); ?? ??? ??? ?spCur -> pNext = NULL; ?? ??? ??? ?spPre -> pNext = spCur; ?? ??? ??? ?spPre = spCur; ?? ??? ?} ?? ?}while(lv != -1 );//以-1結(jié)束。 ?? ?return spHead; } ? //評(píng)委打分 void score(struct singer *); void score(struct singer *sp) { ?? ?long lv; ?? ?struct singer *spCur;?? ? ?? ?do{ ?? ??? ?spCur = sp; ?? ??? ?cout << "輸入歌手編號(hào):"; ?? ??? ?cin >> lv; ?? ??? ?while(spCur -> pNext != NULL && spCur -> lNum != lv) ?? ??? ?{ ?? ??? ??? ?spCur = spCur -> pNext; ?? ??? ?} ?? ? ? ?if (spCur ->lNum == lv){ ?? ??? ? ? ?spCur -> sum1 = 0; ?? ??? ? ? ?cout << "請(qǐng)輸入相應(yīng)10位評(píng)委成績(jī):" ; ?? ??? ? ? ?for(int i = 0; i < 10; i++) ?? ??? ? ? ?{ ?? ??? ? ? ??? ?cin >> spCur -> fScore[i]; ?? ??? ? ? ? ? ?spCur -> sum1 += spCur -> fScore[i]; ?? ??? ? ? ? ? ?if(i == 0) ?? ? ? ? ? ? ? ?{ ?? ? ? ? ? ? ? ??? ?spCur -> min = spCur -> fScore[0]; ?? ??? ? ? ? ? ??? ?spCur -> max = spCur -> fScore[0]; ?? ??? ? ? ? ? ?} ?? ??? ? ? ? ? ?else if(spCur -> fScore[i] > spCur -> max) ?? ??? ? ? ? ? ?{ ?? ??? ? ? ? ? ??? ?spCur -> max = spCur -> fScore[i]; ?? ??? ? ? ? ? ?} ?? ??? ? ? ? ? ?else if(spCur -> fScore[i] < spCur -> min) ?? ??? ? ? ? ? ?{ ?? ??? ? ? ? ? ??? ?spCur -> min = spCur -> fScore[i]; ?? ??? ? ? ? ? ?} ?? ??? ? ? ?} ?? ??? ? ? ?spCur -> sum2 = (spCur -> sum1) - (spCur -> max) - (spCur -> min); ?? ??? ? ? ?spCur -> average = spCur -> sum2 / 8.0f; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "歌手編號(hào)輸入錯(cuò)誤,請(qǐng)重新";? ?? ??? ?} ?? ?} while (lv != -1 );//以-1結(jié)束。 }? ? //遍歷輸出數(shù)歌手?jǐn)?shù)據(jù)? void TraverLiList(struct singer *); void TraverLiList(struct singer *sp) { ?? ?struct singer *spCur; ?? ?spCur = sp -> pNext; ?? ?while (spCur != NULL){ ?? ??? ?cout << "ID:" << setw(6) << spCur -> lNum << endl; ?? ??? ?cout << "姓名: ?" << spCur -> name << endl; ?? ??? ?cout << "十位評(píng)委打分成績(jī)?yōu)椋? << endl; ?? ??? ?for(int i = 0; i < 10; i++) ?? ??? ?cout << "第" << i + 1 << "評(píng)委打分為:" << setw(5) << fixed << setprecision(1) << spCur -> fScore[i] << endl;? ?? ??? ?cout << "去除最高分和最低分的總分為:" << spCur -> sum2; ?? ??? ?cout << " ?平均分?jǐn)?shù)為:" << spCur -> average << endl; ?? ??? ?cout << endl; ?? ??? ?spCur = spCur -> pNext; ?? ?} } ? //追加選手?jǐn)?shù)據(jù)? int AppendNode(struct singer *,long , char *, float*); int AppendNode(struct singer *sp,long lArg, char *m, float *fArg) { ?? ?struct singer *spCur,*spNew; ?? ?spCur = sp; ?? ?int i = 0, j = 0; ?? ?while(spCur -> pNext != NULL){ ?? ? ? ? spCur = spCur -> pNext; ?? ?} ?? ?spNew = new struct singer; ?? ?if (spNew == NULL){ ?? ??? ?return 1; ?? ?} ?? ?spNew -> lNum = lArg; ?? ?for(m, j; *m; m++, j++) ?? ?{ ?? ??? ?spNew -> name[j] = *m; ?? ?} ?? ?spNew -> name[j] = '\0'; ?? ?for(i = 0; i < 10; i++) ?? ?{ ?? ??? ?spNew -> fScore[i] = fArg[i]; ?? ?} ?? ?for(i = 0; i < 10; i++) ?? ?{ ?? ??? ? ?? ? ? ?spNew -> sum1 += spNew -> fScore[i]; ?? ??? ?if(i == 0) ?? ? ? ?{ ?? ? ? ? ? ?spNew -> min = spNew -> fScore[0]; ?? ??? ? ? ?spNew -> max = spNew -> fScore[0]; ?? ??? ?} ?? ??? ?else if(spNew -> fScore[i] > spNew -> max) ?? ? ? ?{ ?? ??? ? ? ?spNew -> max = spNew -> fScore[i]; ?? ??? ?} ?? ??? ?else if(spNew -> fScore[i] < spNew -> min) ?? ??? ?{ ?? ??? ? ? ?spNew -> min = spNew -> fScore[i]; ?? ??? ?} ?? ??? ?} ?? ??? ?spNew -> sum2 = (spNew -> sum1) - (spNew -> max) - (spNew -> min); ?? ? ? ?spNew -> average = spNew -> sum2 / 8.0f; ?? ?spNew -> pNext = NULL; ?? ?spCur -> pNext = spNew; ?? ?return 0; } ? //刪除數(shù)據(jù) int DeleteNode(struct singer *,long); int DeleteNode(struct singer *sp,long lArg) { ?? ?struct singer *spCur,*spT; ?? ?spCur = sp; ?? ?while(spCur -> pNext != NULL && spCur -> pNext ->lNum != lArg){ ?? ??? ?spCur = spCur -> pNext; ?? ?} ?? ?if (spCur -> pNext == NULL){ ?? ??? ?return 1; ?? ?} ?? ?spT = spCur -> pNext; ?? ?spCur -> pNext = spCur -> pNext -> pNext; ?? ?delete spT;//刪除歌手的數(shù)據(jù)? ?? ?return 0; } ? //搜索數(shù)據(jù)? int SearchNode(struct singer *,long ); int SearchNode(struct singer *sp,long lArg) { ?? ?struct singer *spCur; ?? ?spCur = sp; ?? ?while(spCur -> pNext != NULL && spCur -> lNum != lArg){ ?? ??? ?spCur = spCur -> pNext; ?? ?} ?? ?if (spCur ->lNum == lArg){ ?? ??? ?cout << "ID:" << setw(12) << spCur -> lNum << endl; ?? ??? ?cout << "name: ?" << spCur -> name << endl; ?? ??? ?cout << "評(píng)委成績(jī)?yōu)椋? << endl;? ?? ??? ?for(int i = 0; i < 10; i++) ?? ??? ?{ ?? ??? ??? ?cout ?<< setw(8) << fixed << setprecision(1) << spCur -> fScore[i] << endl; ?? ??? ?} ?? ??? ?cout << "去除最高分和最低分的總分為:" << spCur -> sum2; ?? ??? ?cout << " ?平均分?jǐn)?shù)為:" << spCur -> average << endl; ?? ??? ?return 0; ?? ?} ?? ?else ?? ?{ ?? ??? ?return 1; ?? ?} } ? //退出系統(tǒng),刪除鏈表數(shù)據(jù) struct singer *ReleaseLiList(struct singer *); struct singer *ReleaseLiList(struct singer *sp) { ?? ?struct singer *spCurr,*spPrv; ?? ?spPrv = sp; ?? ?while (spPrv -> pNext != NULL){ ?? ??? ?spCurr = spPrv -> pNext; ?? ??? ?delete spPrv; ?? ??? ?spPrv = spCurr; ?? ?} ?? ?delete sp; ?? ?return NULL; } ? //鏈表數(shù)據(jù)根據(jù)平均分排序 struct singer* SortList(struct singer* ); struct singer* SortList(struct singer* head) { ? ? ? ? if(!head || !head->pNext)? ?? ??? ?return head; ? ? ? ? struct singer* dummy = NULL; ? ? ? ? dummy = new singer[1]; ? ? ? ? dummy -> pNext = head; ? ? ? ? struct singer* pre = head; // 當(dāng)前節(jié)點(diǎn)的前驅(qū) ? ? ? ? struct singer* cur = head->pNext; ? ? ? ? while(cur != NULL){ ? ? ? ? ? ? struct singer* tmp = dummy; ? ? ? ? ? ? if(pre-> average >= cur->average){ //需要進(jìn)行插入 ? ? ? ? ? ? ? ? while(tmp->pNext->average < cur->average) //從第一個(gè)節(jié)點(diǎn)開始尋找插入位置 ? ? ? ? ? ? ? ? ? ? tmp = tmp->pNext; // cur應(yīng)該插入在tmp后面 ? ? ? ? ? ? ? ? pre->pNext = cur->pNext; //斷開節(jié)點(diǎn)cur ? ? ? ? ? ? ? ? cur->pNext = tmp->pNext; //插入 ? ? ? ? ? ? ? ? tmp->pNext = cur; ? ? ? ? ? ? ? ? cur = pre->pNext; //繼續(xù)處理下一個(gè)節(jié)點(diǎn) ? ? ? ? ? ? } ? ? ? ? ? ? else{ //無(wú)需插入 ? ? ? ? ? ? ? ? pre = pre->pNext; ? ? ? ? ? ? ? ? cur = cur->pNext; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? cout << "歌手按平均分排序成功!請(qǐng)選擇功能7遍歷查看。"; ?? ? ? ?system("Pause"); ? ? ? ? return dummy->pNext; ? ? } ? //將數(shù)據(jù)寫入文件 void input(struct singer *); void input(struct singer *sp) { ?? ?fstream outFile; ?? ?outFile.open("C:\\Users\\fengling\\Desktop\\歌手比賽打分?jǐn)?shù)據(jù)統(tǒng)計(jì).txt", ios::out); ?? ?if (!outFile){ ?? ??? ?cout << "Destination file open error!"; ?? ??? ?cout << "文件寫入錯(cuò)誤"; ?? ??? ?exit(1); ?? ?} ?? ?else ?? ?{ ?? ??? ?cout << "文件寫入中......" << endl; ?? ?} ?? ?struct singer *spCur; ?? ?spCur = sp -> pNext; ?? ?while (spCur != NULL){ ?? ??? ?outFile << "ID:" << setw(6) << spCur -> lNum << endl; ?? ??? ?outFile << "姓名: ?" << spCur -> name << endl; ?? ??? ?outFile << "十位評(píng)委打分成績(jī)?yōu)椋? << endl; ?? ??? ?for(int i = 0; i < 10; i++) ?? ??? ?outFile << "第" << i + 1 << "評(píng)委打分為:" <<setw(5) << fixed << setprecision(1) << spCur -> fScore[i] << endl; ?? ??? ?outFile << "去除最高分和最低分的總分為:" << spCur -> sum2; ?? ??? ?outFile << " ?平均分?jǐn)?shù)為:" << spCur -> average << endl; ?? ??? ?outFile << endl; ?? ??? ?spCur = spCur -> pNext; ?? ?} ?? ?outFile.close(); ?? ?cout << "文件寫入成功!請(qǐng)?jiān)谧烂嫦麓蜷_查看。"; ?? ?system("Pause"); } ? int main(void) { ?? ?struct singer *spHead = NULL; ?? ?int iIndex, iStatus = 0; ?? ?long lID; ?? ?float fScore[10]; ?? ?system("color 5E"); ?? ?do{ ?? ??? ?system("CLS"); ?? ??? ?cout << " ? ? ? ? ? ? ——————————*歌手評(píng)分系統(tǒng)*————————" << endl;? ?? ??? ?Interface x; ? ? ? ? string *per=new string[10]; ? ? ? ? per[0]="輸入選手?jǐn)?shù)據(jù)"; ? ? ? ? per[1]="評(píng)委打分"; ? ? ? ? per[2]="成績(jī)排序(按平均分)"; ? ? ? ? per[3]="歌手?jǐn)?shù)據(jù)查詢"; ? ? ? ? per[4]="追加選手?jǐn)?shù)據(jù)"; ? ? ? ? per[5]="寫入數(shù)據(jù)文件"; ? ? ? ? per[6]="遍歷顯示數(shù)據(jù)"; ? ? ? ? per[7]="刪除選手?jǐn)?shù)據(jù) "; ? ? ? ? x.GetMessage(8,per); ? ? ? ? x.ShowSurface(); ?? ??? ?cout << "輸入選擇項(xiàng):"; ?? ??? ?cin >> iIndex; ? ?? ??? ?switch(iIndex) ?? ??? ?{ ?? ??? ?case 1://輸入選手?jǐn)?shù)據(jù)。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead != NULL){ ?? ??? ? ? ??? ?ReleaseLiList(spHead); ?? ??? ??? ??? ?spHead = NULL; ?? ??? ??? ?} ?? ??? ??? ?cout << "以空格分隔輸入歌手遍號(hào)、姓名后回車確認(rèn)(輸入-1結(jié)束)\n"; ?? ??? ??? ?spHead = CreatLiList(); ?? ??? ??? ?break; ?? ??? ?case 2://評(píng)委打分。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手?jǐn)?shù)據(jù)未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?score(spHead); ?? ??? ??? ?break; ?? ??? ?case 3://成績(jī)排序。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手?jǐn)?shù)據(jù)未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?SortList(spHead); ?? ??? ??? ?break; ?? ??? ?case 4: //數(shù)據(jù)查詢。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手信息未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?cout << "輸入需要查找的歌手編號(hào):"; ?? ??? ??? ?cin >> lID; ?? ??? ??? ?iStatus = SearchNode(spHead,lID); ?? ??? ??? ?if (iStatus == 1){ ?? ??? ??? ??? ?cout << "The Id is not found!\n"; ?? ??? ??? ?} ?? ??? ??? ?system("Pause"); ?? ??? ??? ?break;? ?? ??? ?case 5://追加選手?jǐn)?shù)據(jù)。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手信息未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?char str[20]; ?? ??? ??? ?cout << "請(qǐng)輸入編號(hào):"; ?? ??? ??? ?cin >> lID; ? ?? ??? ??? ?getchar(); ?? ??? ??? ?cout << "請(qǐng)輸入姓名:"; ?? ??? ??? ?cin.getline(str,80); ?? ??? ??? ?cout << "請(qǐng)輸入分?jǐn)?shù):"; ?? ??? ??? ?for(int i = 0; i < 10; i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?cin >> fScore[i]; ?? ??? ??? ?} ?? ??? ??? ?iStatus = AppendNode(spHead, lID, str, fScore); ?? ??? ??? ?if (iStatus == 1){ ?? ??? ??? ??? ?cout << "添加失敗!\n"; ?? ??? ??? ?} ?? ??? ??? ?else{ ?? ??? ??? ??? ?cout << "添加成功!\n"; ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case 6://寫入文件 ?? ??? ? ? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手信息未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?input(spHead); ?? ??? ??? ?break;? ?? ??? ?case 7://遍歷顯示數(shù)據(jù)。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手信息未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?cout << "歌手的數(shù)據(jù)為:\n"; ?? ??? ??? ?TraverLiList(spHead); ?? ??? ??? ?system("pause"); ?? ??? ??? ?break; ?? ??? ?case 8://刪除選手?jǐn)?shù)據(jù)。 ?? ??? ??? ?system("CLS"); ?? ??? ??? ?if (spHead == NULL){ ?? ??? ??? ??? ?cout << "歌手信息未錄入,請(qǐng)選擇1輸入數(shù)據(jù)!"; ?? ??? ??? ??? ?system("Pause"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?cout << "輸入要?jiǎng)h除結(jié)點(diǎn)的選手編號(hào):"; ?? ??? ??? ?cin >> lID; ?? ??? ??? ?iStatus = DeleteNode(spHead,lID); ?? ??? ??? ?if (iStatus == 1){ ?? ??? ??? ??? ?cout << "刪除失敗!\n"; ?? ??? ??? ?} ?? ??? ??? ?else{ ?? ??? ??? ??? ?cout << "刪除成功!\n"; ?? ??? ??? ?} ?? ??? ??? ?system("Pause"); ?? ??? ??? ?break; ?? ??? ?case 9://退出系統(tǒng)? ?? ??? ??? ?if (spHead != NULL){//釋放鏈表 ?? ??? ??? ??? ?ReleaseLiList(spHead); ?? ??? ??? ??? ?spHead = NULL; ?? ??? ??? ?} ?? ??? ??? ?exit(0); ?? ??? ?default: ?? ??? ??? ?cout << "選擇錯(cuò)誤,請(qǐng)重新輸入選擇項(xiàng)!\n"; ?? ??? ??? ?system("Pause"); ? ? ? ? } ?? ?} while(1);? ?? ? ? ? return 0;? }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于C語(yǔ)言的庫(kù)封裝發(fā)布技術(shù)詳解
在編程的過(guò)程中,使用已經(jīng)封裝好的庫(kù)函數(shù)是十分方便的,也是十分高效的,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言庫(kù)的封裝和使用的相關(guān)資料,需要的朋友可以參考下2021-08-08異步http listener 完全并發(fā)處理懲罰http懇求的小例子
異步http listener 完全并發(fā)處理懲罰http懇求的小例子,需要的朋友可以參考一下2013-05-05掌握C++:揭秘寫時(shí)拷貝與淺深拷貝之間的關(guān)系
探索C++的奧秘,本指南將揭秘寫時(shí)拷貝與淺深拷貝之間的微妙關(guān)系,摸索這些復(fù)雜概念背后的邏輯,讓你的編程技能瞬間提升,來(lái)吧,讓我們一起進(jìn)入這個(gè)引人入勝的C++世界!2024-01-01C語(yǔ)言實(shí)現(xiàn)求解素?cái)?shù)的N種方法總結(jié)
哈嘍各位友友們,今天又學(xué)到了很多有趣的知識(shí),現(xiàn)在迫不及待的想和大家分享一下!本文將手把手帶領(lǐng)大家探討利用試除法、篩選法求解素?cái)?shù)的n層境界!都是精華內(nèi)容,可不要錯(cuò)過(guò)喲2023-01-01C/C++表格組件Qt?TableWidget應(yīng)用詳解
本文詳細(xì)講解了C/C++中使用列表框組件Qt?TableWidget的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12C語(yǔ)言當(dāng)函數(shù)執(zhí)行成功時(shí)return1還是0
本文主要介紹了C語(yǔ)言當(dāng)函數(shù)執(zhí)行成功時(shí)return1還是0,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09C++實(shí)現(xiàn)重載矩陣的部分運(yùn)算符
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)重載矩陣的部分運(yùn)算符,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下2022-10-10C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊的六種模式詳程建議收藏
遲早一定會(huì)掛掉的俄羅斯方塊,為什么至今仍是世界游戲之王?它是怎么編寫的?本文將給大家詳細(xì)介紹六種模式的實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值2022-02-02