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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、武漢輕工大學數(shù)計學院C語言課程設計報告班級:電腦類1307班學號:1305110009:韓品指導教師:賈瑜日期:2014年6月18日一、實驗目的1 .在編輯應用程序過程中,逐步加深對 C語言編程的理解;2 .加強實踐的能力,動手能力,同時進一步對所學的知識進行穩(wěn)固;3 .培養(yǎng)初步編程的能力,為以后的學習奠定基礎。二、實驗內容運用所學的C語言知識編輯應用程序:班級成績管理系統(tǒng)以及運動的時鐘三.系統(tǒng)軟件環(huán)境:四.課程設計題目:1 .必做題:班級成績管理系統(tǒng)對一個有N個學生的班級,每個學生有M門課程。該系統(tǒng)實現(xiàn)對班級 成績的錄入、顯示、修改、排序、保存、查詢等操作的管理。功能要 求:1本系統(tǒng)采用一個

2、結構體數(shù)組,每個數(shù)據(jù)的結構應當包括:學號、 M門課程名稱。2本系統(tǒng)顯示這樣的菜單:請選擇系統(tǒng)功能項:a、成績錄入b、成績顯示c、成績保存d、成績排序e、成績修改要求先輸入密碼f、成績統(tǒng)計1顯示每門課程成績最高的學生的基本信息。2顯示每門課程的平均成績 ,柱狀圖顯示。3顯示超過某門課程平均成績的學生人數(shù)。4顯示某門課程每個分數(shù)段區(qū)間的人數(shù),用餅狀圖顯示g、退出系統(tǒng)3執(zhí)行一個具體的功能之后,程序將重新顯示菜單。4將學生成績保存到文件中。五.數(shù)據(jù)結構設計描述:一班級成績管理系統(tǒng)主函數(shù)菜單函數(shù)添加顯示查找修改刪除排序存檔讀檔退由一班級成績管理系統(tǒng)#include <string.h>#in

3、clude <stdio.h>#include <stdlib.h>#include<graphics.h>#include<conio.h>#define _COURSES 3/ 定義科目數(shù)#define _LEN sizeof(student)/定義結構體大小/枚舉返回值情況enum statusOVERFLOW = -1, /內存(溢出)問題DONE = 0, / 成功NOFOUND = 1, / 不存在OPENFAIL = 2, / 打開(文件)失敗BACK = 3 / 返回);/end/定義學生信息結構體typedefstructStu

4、dentInfo/數(shù)據(jù)域unsigned intnum;/ 學號char name11;/float scores_COURSES;/ 各科成績/指針域structStudentInfo *next;/存放下一節(jié)點的地址student;/endstudent *head=NULL;/聲明鏈表頭結點student *curr=NULL;/聲明指向當前節(jié)點的指針int total = 0;/聲明當前節(jié)點個數(shù)intinit();/初始化鏈表intadd_stu();/添加新節(jié)點intshow_all();/顯示所有學生信息intfind_stu();/查找指定信息節(jié)點intmodify_stu();

5、/修改指定信息節(jié)點intremove_stu();刪除指定信息節(jié)點intsort_list();/對鏈表排序intsave_to_file();/將所有信息保存至文件intread_from_file(); 從文件中讀取信息int picture。;/畫分布圖int quit();/釋放所有節(jié)點空間int entering(student *input);/錄入學生信息void menu();void show_stu(student *show, int serial);/顯示指定學生信息void start();/ 程序開始界面void change(student *former, st

6、udent *latter, student *temp);/交換兩個節(jié)點的數(shù)據(jù)域void main()int h,flag1,flag2;char name20="hyw",password10="hyw"char person20,password110;printf ("tt *歡送進入學生成績管理系統(tǒng)!*nn");printf ("ttt用戶登錄nn");for(h=0;h!=5;)printf("tttt用戶名:");gets(person);flag1=strcmp(person,n

7、ame);printf("tttt密碼:");gets(password1);flag2=strcmp(password,password1);if(flag1=0 && flag2=0)printf("tttt登陸成功!nn");menu();break;elseprintf ("ttt用戶名或密碼錯誤!nn");printf ("ttt請注意:您還剩d次時機!nn",4-h);h+;)if (h=5)n");printf ("對不起,您輸入的用戶名或密碼有誤,已被強制退出)v

8、oid 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;case 3: find_stu(); break;case 4: modify_stu(); break;case 5: remove_stu(); break

9、;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 = (student *)malloc(_LEN);/ 為頭結點申請空間if (!head)/如果申請空間失敗,返回return OVERFLOW;)head->

10、next = NULL;/指向下一節(jié)點(空)curr = head->next;/當前節(jié)點指針指向第一個結點total = 0;/當前節(jié)點個數(shù)初始化為0(頭結點不計算在內)return DONE;)/*功能:頭插法添加新節(jié)點,并刷新學生人數(shù)*/intadd_stu()student *add = (student *)malloc(_LEN);curr = head->next;/當前節(jié)點指針指向第一個節(jié)點printf("t= 當前已存入 %d 個同學 n",total);printf("請輸入第 %d個學生的信息n",total+1);if

11、 (BACK = entering(add)free(add);return BACK;)head->next = add;/頭結點指針域指向新建的節(jié)點add->next = curr;/新建節(jié)點指針域指向第一個節(jié)點curr = add; /當前節(jié)點指向新建的節(jié)點total += 1; / 更新學生總人數(shù) return DONE;)/*功能:顯示所有學生信息*/intshow_all()if ( 0 = total )printf("t=沒有可供顯示的學生信息!n");return NOFOUND;curr = head->next;當前節(jié)點指針指向第一個

12、節(jié)點printf("t%4s%12s%12s"," 序號","學號","");for (int m=0; m<_COURSES; m+)printf("%7s"," 科目)printf("n");printf("tn");for (inti=1; i<=total; i+)show_stu(curr,i);curr = curr->next;當前節(jié)點指針后移printf("tn");return DONE;/

13、*功能:查找指定學生信息*/intfind_stu()charstu_name11;int flag=1;printf("請輸入要查找的學生:");scanf("%s",stu_name);curr = head->next;/ 指向第一個節(jié)點while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf("t%4s%12s%12s"," 序號","學號","");for (int m=0; m<

14、_COURSES; m+)printf("n");printf("tn");show_stu(curr,flag);return DONE;)curr = curr->next;+flag;)printf("t=沒有找到%s !請仔細核對再查找n",stu_name);return NOFOUND;)/*功能:修改指定學生的所有信息*/intmodify_stu()charstu_name11;int flag=1;curr = head->next;/ 指向第一個節(jié)點printf("請輸入要修改的學生的:&qu

15、ot;);scanf("%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)printf("t%4s%12s%12s"," 序號","學號","");for (int m=0; m<_COURSES; m+)printf("%7s"," 科目)printf("n");printf("tn");show_stu(curr,flag

16、);entering(curr);printf("t=成功修改了 %s 的所有信息!n",stu_name);return DONE;)curr = curr->next;+flag;)printf("t= 沒有找到 %s !請仔細核對 n",stu_name);return NOFOUND;)/*功能:刪除指定學生*/intremove_stu()student *pre=head;charstu_name11;curr = head->next;/ 指向第一個節(jié)點printf("請輸入要刪除的學生的:");scanf(

17、"%s",stu_name);while (curr != NULL)if (strcmp(stu_name,curr->name) = 0)pre->next = curr->next;free(curr);-total;printf("t=已成功刪除 "%s"n",stu_name);return DONE;)pre = pre->next;curr = curr->next;)printf("t= 沒有找到 %s !請仔細核對 n",stu_name);return NOFOUN

18、D;)/*功能:對所有學生排序*/intsort_list()student *temp = (student *)malloc(_LEN);student *curr_i = head->next;student *curr_j = NULL;char choice='0'printf("t t1-按學號排序.t2- 按排序.n");printf("t t3-按科目排序.t0-退 出 排 序.n");printf("請選擇:");scanf("%c",&choice);fflush(

19、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)change(curr_i,curr_j,temp);)curr_j = curr_j->next;)curr_i = curr_i->next;)printf("t= 排序成功!n");break;)case '2':while(curr_i-

20、>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->next;curr_i = curr_i->next;printf("t= 排序成功!n");break;case '3':while(curr_i->next != NULL)curr_j = curr_i->ne

21、xt;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("t= 排序成功!n");break;case '0':free(temp);return BACK;default:printf("t=輸入有誤!n");break;)free(temp);return DONE;)/*功能:保存數(shù)

22、據(jù)到文件*/intsave_to_file()curr=head->next;if (total = 0)printf("t=目前還沒有任何信息,不用保存!n");return BACK;)FILE *fp;if(fp=fopen("record.dat","wb")=NULL)printf("t= 文件打開失敗!n");return OPENFAIL;)while (curr != NULL)/將數(shù)據(jù)成塊寫入文件fwrite(char *)curr, _LEN, 1, fp);curr=curr->n

23、ext;)fclose(fp);printf("t=信息已成功保存至文件"record.dat"文件中n");return DONE;)/*功能:從文件中讀取數(shù)據(jù)*/intread_from_file()char judge='y'FILE *fp;if(fp=fopen("record.dat","r")=NULL)printf("文件不存在或者打開失?。");return OPENFAIL;printf("t=讀取文件會覆蓋當前信息!是否確定載入文件?(y/n):

24、");scanf("%c",&judge);if (judge='n' | judge='N') return BACK;quit();/釋放以前所有信息的空間init();/重新初始化鏈表curr = head;/當前節(jié)點指針指向頭結點student *add=(student *)malloc(_LEN);/申請空間存放讀取的信息while (fread(char *)add, _LEN, 1, fp)/由于存儲的信息是最新的信息在前,所以讀取的時候將其添加在鏈表尾add->next=curr->next;c

25、urr->next=add;curr=add;add=(student *)malloc(_LEN);+total;fclose(fp);printf("t=文件載入成功!當前已有學生。n",total);return DONE;/*功能:釋放內存*/ int quit()curr =head->next;student *temp=curr;while(curr != NULL)temp=curr->next;free(curr);curr=temp;curr=NULL;temp=NULL;free(head);/ 釋放頭節(jié)點return DONE;/*

26、功能:錄入一個學生的全部信息*/int entering(student *input)printf("n請輸入學生的學號(輸入0退出添加):");scanf("%d",&input->num);if (0 = input->num)return BACK;printf(" 請輸入學生的(五個漢字以內):");scanf("%s",&input->name);printf(" 請輸入d門科目的成績(用空格隔開):",_COURSES);for (inti=0;

27、i<_COURSES; i+)scanf("%f",&input->scoresi);return DONE;/*功能:顯示指定學生的所有信息*/voidshow_stu(student *show, int serial)printf("t%4d%12d%12s",serial,show->num,show->name);for (inti=0; i<_COURSES; i+)printf("%7.1f",show->scoresi);)printf("n");)/*功

28、能:根據(jù)權限進入不同的界面*/ void start()printf("n")printf("ttt歡送使用學生成績管理系統(tǒng)n");printf("t*n");printf("t*n");printf("t|t1-添加學生.t2顯示信息.|n");printf("t|t3-查找學生.t4修改信息.|n");printf("t|t5-刪除學生 .t6學生排序.|n");printf("t|t7-信息存檔.t8讀取存檔.|n");print

29、f("t|t9-成績統(tǒng)計.t0退出.|n");*void change(student *former, student *latter,student *temp)*temp = *former;strcpy(former->name , latter->name);strcpy(latter->name , temp->name);former->num = latter->num;latter->num = temp->num;for (inti=0; i<_COURSES; i+)former->score

30、si = latter->scoresi;latter->scoresi = temp->scoresi;)voidbing(double a,doubleb,int c)initgraph(640,480);doublex,y;char s=" A:10080紅;B:8060 藍;C:60-0 黑;"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

31、,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,350);line(200,350,200,50);line(190,60,200,50); line(210,60,200,50);line(590,340,600,350);line(590,360,600,350);char s="科目";outtextxy(580,320,s);char p=" 平均分"outtextxy(100,100,p);setfillcolor(LIGHTMAGENTA);fillrectangle(250,300,300,350);fillrectangle(350,250,400,350);fillrectangle(450,290,500,350);getch();closegraph()

溫馨提示

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

評論

0/150

提交評論