班級成績管理系統(tǒng)_第1頁
班級成績管理系統(tǒng)_第2頁
班級成績管理系統(tǒng)_第3頁
班級成績管理系統(tǒng)_第4頁
班級成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、武漢輕工大學(xué) 數(shù)計學(xué)院 C語言課程設(shè)計報告班級:計算機(jī)類1307班學(xué)號: 1305110009姓名: 韓晶 指導(dǎo)教師:賈瑜 日期:2014年6月18日一、實驗?zāi)康?.在編輯應(yīng)用程序過程中,逐步加深對C語言編程的理解;2.加強(qiáng)實踐的能力,動手能力,同時進(jìn)一步對所學(xué)的知識進(jìn)行鞏固;3.培養(yǎng)初步編程的能力,為以后的學(xué)習(xí)奠定基礎(chǔ)。二、實驗內(nèi)容運用所學(xué)的C語言知識編輯應(yīng)用程序:班級成績管理系統(tǒng)以及運動的時鐘三系統(tǒng)軟件環(huán)境:本程序主要運行在: Visual C+ 6.0 Turbo C/C+ 3.0四.課程設(shè)計題目:1.必做題:班級成績管理系統(tǒng) 對一個有N個學(xué)生的班級,每個學(xué)生有M門課程。該系統(tǒng)實現(xiàn)對班級

2、成績的錄入、顯示、修改、排序、保存、查詢等操作的管理。功能要求: (1)本系統(tǒng)采用一個結(jié)構(gòu)體數(shù)組,每個數(shù)據(jù)的結(jié)構(gòu)應(yīng)當(dāng)包括:學(xué)號、姓名、M門課程名稱。 (2)本系統(tǒng)顯示這樣的菜單: 請選擇系統(tǒng)功能項: a、成績錄入 b、成績顯示 c、成績保存 d、成績排序e、成績修改(要求先輸入密碼) f、成績統(tǒng)計1)顯示每門課程成績最高的學(xué)生的基本信息。 2)顯示每門課程的平均成績 ,柱狀圖顯示。3)顯示超過某門課程平均成績的學(xué)生人數(shù)。 4)顯示某門課程每個分?jǐn)?shù)段區(qū)間的人數(shù),用餅狀圖顯示。g、退出系統(tǒng) (3)執(zhí)行一個具體的功能之后,程序?qū)⒅匦嘛@示菜單。 (4)將學(xué)生成績保存到文件中。五數(shù)據(jù)結(jié)構(gòu)設(shè)計描述:(一)

3、班級成績管理系統(tǒng)主函數(shù)菜單函數(shù)添加顯示查找修改刪除排序存檔讀檔退出六.源程序(一)班級成績管理系統(tǒng)#include <string.h>#include <stdio.h>#include <stdlib.h>#include<graphics.h>#include<conio.h>#define _COURSES 3/定義科目數(shù)#define _LEN sizeof(student)/定義結(jié)構(gòu)體大小/枚舉返回值情況enum statusOVERFLOW = -1, /內(nèi)存(溢出)問題DONE = 0, /成功NOFOUND = 1,

4、 /不存在OPENFAIL = 2, /打開(文件)失敗BACK = 3 /返回;/end/定義學(xué)生信息結(jié)構(gòu)體typedefstructStudentInfo/數(shù)據(jù)域unsigned intnum;/學(xué)號char name11;/姓名float scores_COURSES;/各科成績/指針域structStudentInfo *next;/存放下一節(jié)點的地址student;/endstudent *head=NULL;/聲明鏈表頭結(jié)點student *curr=NULL;/聲明指向當(dāng)前節(jié)點的指針int total = 0;/聲明當(dāng)前節(jié)點個數(shù)intinit();/初始化鏈表intadd_stu

5、();/添加新節(jié)點intshow_all();/顯示所有學(xué)生信息intfind_stu();/查找指定信息節(jié)點intmodify_stu();/修改指定信息節(jié)點intremove_stu();/刪除指定信息節(jié)點intsort_list();/對鏈表排序intsave_to_file();/將所有信息保存至文件intread_from_file();/從文件中讀取信息int picture();/畫分布圖int quit();/釋放所有節(jié)點空間int entering(student *input);/錄入學(xué)生信息void menu();void show_stu(student *show,

6、int serial);/顯示指定學(xué)生信息void start();/程序開始界面void change(student *former, student *latter, student *temp);/交換兩個節(jié)點的數(shù)據(jù)域void main()int h,flag1,flag2;char name20="hyw",password10="hyw"char person20,password110;printf ("tt * 歡迎進(jìn)入學(xué)生成績管理系統(tǒng)!*nn");printf ("ttt 用 戶 登 錄nn");

7、for(h=0;h!=5;)printf("tttt 用戶名:");gets(person); flag1=strcmp(person,name);printf("tttt 密碼:");gets(password1); flag2=strcmp(password,password1);if(flag1=0 && flag2=0)printf("tttt 登陸成功!nn");menu();break;elseprintf ("ttt 用戶名或密碼錯誤!nn");printf ("ttt 請注

8、意:您還剩%d次機(jī)會!nn",4-h);h+;if (h=5)printf ("對不起,您輸入的用戶名或密碼有誤,已被強(qiáng)制退出。n"); void menu() int choice=0;init();while(1)system("cls");/清屏start();printf("請選擇:");scanf("%d",&choice);fflush(stdin);/清空緩沖區(qū)switch (choice)case 1:add_stu(); break;case 2:show_all();break

9、;case 3: find_stu(); break;case 4: modify_stu(); break;case 5: remove_stu(); break;case 6: sort_list(); break;case 7: save_to_file(); break;case 8: read_from_file(); break;case 9: picture(); break;case 0: quit();exit(0); break;default: break;system("pause");/暫停批文件的處理并顯示消息intinit()head = (s

10、tudent *)malloc(_LEN);/為頭結(jié)點申請空間if (!head)/如果申請空間失敗,返回return OVERFLOW;head->next = NULL;/指向下一節(jié)點(空)curr = head->next;/當(dāng)前節(jié)點指針指向第一個結(jié)點total = 0;/當(dāng)前節(jié)點個數(shù)初始化為0(頭結(jié)點不計算在內(nèi))return DONE; /*功能:頭插法添加新節(jié)點,并刷新學(xué)生人數(shù) */intadd_stu()student *add = (student *)malloc(_LEN);curr = head->next;/當(dāng)前節(jié)點指針指向第一個節(jié)點printf(&qu

11、ot;t=當(dāng)前已存入 %d 個同學(xué)n",total);printf("請輸入第 %d 個學(xué)生的信息n",total+1);if (BACK = entering(add)free(add);return BACK;head->next = add;/頭結(jié)點指針域指向新建的節(jié)點add->next = curr;/新建節(jié)點指針域指向第一個節(jié)點curr = add; /當(dāng)前節(jié)點指向新建的節(jié)點total += 1; /更新學(xué)生總?cè)藬?shù)return DONE;/*功能:顯示所有學(xué)生信息 */intshow_all()if ( 0 = total )printf(&

12、quot;t=沒有可供顯示的學(xué)生信息!n");return NOFOUND;curr = head->next;/當(dāng)前節(jié)點指針指向第一個節(jié)點printf("t%4s%12s%12s","序號","學(xué)號","姓名");for (int m=0; m<_COURSES; m+)printf("%7s","科目");printf("n");printf("t-n");for (inti=1; i<=total; i

13、+)show_stu(curr,i);curr = curr->next;/當(dāng)前節(jié)點指針后移printf("t-n");return DONE;/*功能:查找指定學(xué)生信息 */intfind_stu()charstu_name11;int flag=1;printf("請輸入要查找的學(xué)生姓名:");scanf("%s",stu_name);curr = head->next;/指向第一個節(jié)點while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf(&

14、quot;t%4s%12s%12s","序號","學(xué)號","姓名");for (int m=0; m<_COURSES; m+)printf("%7s","科目");printf("n");printf("t-n");show_stu(curr,flag);return DONE;curr = curr->next;+flag;printf("t=沒有找到 %s !請仔細(xì)核對姓名再查找n",stu_name);re

15、turn NOFOUND;/*功能:修改指定學(xué)生的所有信息 */intmodify_stu()charstu_name11;int flag=1;curr = head->next;/指向第一個節(jié)點printf("請輸入要修改的學(xué)生的姓名:");scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf("t%4s%12s%12s","序號","學(xué)號","姓名&quo

16、t;);for (int m=0; m<_COURSES; m+)printf("%7s","科目");printf("n");printf("t-n");show_stu(curr,flag);entering(curr);printf("t=成功修改了 %s 的所有信息!n",stu_name);return DONE;curr = curr->next;+flag;printf("t=沒有找到 %s !請仔細(xì)核對姓名n",stu_name);return N

17、OFOUND;/*功能:刪除指定學(xué)生 */intremove_stu()student *pre=head;charstu_name11;curr = head->next;/指向第一個節(jié)點printf("請輸入要刪除的學(xué)生的姓名:");scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)pre->next = curr->next; free(curr); -total; printf("t=已成功刪除"%s

18、"n",stu_name);return DONE;pre = pre->next;curr = curr->next;printf("t=沒有找到 %s !請仔細(xì)核對姓名n",stu_name);return NOFOUND;/*功能:對所有學(xué)生排序 */intsort_list()student *temp = (student *)malloc(_LEN);student *curr_i = head->next;student *curr_j = NULL;char choice='0'printf("

19、t t1-按學(xué)號排序 .t2-按姓名排序 . n");printf("t t3-按科目排序 .t0-退 出 排 序. n");printf("請選擇:");scanf("%c",&choice);fflush(stdin);switch (choice)case '1':while(curr_i->next != NULL)curr_j = curr_i->next;while (curr_j != NULL)if (curr_i->num>curr_j->num)cha

20、nge(curr_i,curr_j,temp);curr_j = curr_j->next;curr_i = curr_i->next;printf("t=排序成功!n");break; case '2':while(curr_i->next != NULL)curr_j = curr_i->next;while (curr_j != NULL)if (strcmp(curr_i->name , curr_j->name) > 0)change(curr_i,curr_j,temp);curr_j = curr_j-

21、>next;curr_i = curr_i->next;printf("t=排序成功!n");break; case '3':while(curr_i->next != NULL)curr_j = curr_i->next;while (curr_j != NULL)if (curr_i->scores0 <curr_j->scores0)change(curr_i,curr_j,temp);curr_j = curr_j->next;curr_i = curr_i->next;printf("

22、t=排序成功!n");break; case '0':free(temp);return BACK; default:printf("t=輸入有誤!n");break;free(temp);return DONE;/*功能:保存數(shù)據(jù)到文件 */intsave_to_file()curr=head->next;if (total = 0)printf("t=目前還沒有任何信息,不用保存!n");return BACK;FILE *fp;if(fp=fopen("record.dat","wb&q

23、uot;)=NULL)printf("t=文件打開失敗!n");return OPENFAIL;while (curr != NULL)/將數(shù)據(jù)成塊寫入文件fwrite(char *)curr, _LEN, 1, fp);curr=curr->next;fclose(fp);printf("t=信息已成功保存至文件"record.dat"文件中n");return DONE;/*功能:從文件中讀取數(shù)據(jù) */intread_from_file()char judge='y'FILE *fp;if(fp=fopen(

24、"record.dat","r")=NULL)printf("文件不存在或者打開失敗!n");return OPENFAIL;printf("t=讀取文件會覆蓋當(dāng)前信息!是否確定載入文件?(y/n):");scanf("%c",&judge);if (judge='n' | judge='N')return BACK;quit();/釋放以前所有信息的空間init();/重新初始化鏈表curr = head;/當(dāng)前節(jié)點指針指向頭結(jié)點student *add

25、=(student *)malloc(_LEN);/申請空間存放讀取的信息while (fread(char *)add, _LEN, 1, fp)/由于存儲的信息是最新的信息在前,所以讀取的時候?qū)⑵涮砑釉阪湵砦瞐dd->next=curr->next;curr->next=add;curr=add;add=(student *)malloc(_LEN);+total;fclose(fp);printf("t=文件載入成功!當(dāng)前已有%d個學(xué)生。n",total);return DONE;/*功能:釋放內(nèi)存 */int quit()curr =head-&g

26、t;next;student *temp=curr;while(curr != NULL)temp=curr->next;free(curr);curr=temp;curr=NULL;temp=NULL;free(head);/釋放頭節(jié)點return DONE;/*功能:錄入一個學(xué)生的全部信息 */int entering(student *input)printf("n請輸入學(xué)生的學(xué)號(輸入0退出添加):");scanf("%d",&input->num);if (0 = input->num)return BACK;prin

27、tf("請輸入學(xué)生的姓名(五個漢字以內(nèi)):");scanf("%s",&input->name);printf("請輸入%d門科目的成績(用空格隔開):", _COURSES);for (inti=0; i<_COURSES; i+)scanf("%f",&input->scoresi);return DONE;/*功能:顯示指定學(xué)生的所有信息 */voidshow_stu(student *show, int serial)printf("t%4d%12d%12s&qu

28、ot;,serial,show->num,show->name);for (inti=0; i<_COURSES; i+)printf("%7.1f",show->scoresi);printf("n");/*功能:根據(jù)權(quán)限進(jìn)入不同的界面 */void start()printf("n")printf("ttt歡迎使用學(xué)生成績管理系統(tǒng)n");printf("t*n");printf("t|t1-添 加 學(xué) 生.t2-顯 示 信 息. |n"); pri

29、ntf("t|t3-查 找 學(xué) 生.t4-修 改 信 息. |n"); printf("t|t5-刪 除 學(xué) 生.t6-學(xué) 生 排 序. |n");printf("t|t7-信 息 存 檔.t8-讀 取 存 檔. |n");printf("t|t9-成 績 統(tǒng) 計.t0-退 出. |n");printf("t*n");void change(student *former, student *latter,student *temp) *temp = *former;strcpy(former-

30、>name , latter->name);strcpy(latter->name , temp->name);former->num = latter->num;latter->num = temp->num;for (inti=0; i<_COURSES; i+)former->scoresi = latter->scoresi;latter->scoresi = temp->scoresi; voidbing(double a,doubleb,int c)initgraph(640,480);doublex,y

31、; char s=" A:10080 紅 ; B:8060 藍(lán) ; C:600 黑 ;"x=a/(a+b+c)*6; y=(a+b)/(a+b+c)*6;circle(320,240,160);setfillcolor(BLUE);fillpie(160,80,480,400,0,y);setfillcolor(RED);fillpie(160,80,480,400,0,x);outtextxy(160,40,s);getch();closegraph();voidzhu(float a,floatb,float c)initgraph(640,480);setcolor(YELLOW);line(200,350,600,35

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論