當(dāng)前位置首頁 > 辦公文檔 > 模板/表格
搜柄,搜必應(yīng)! 快速導(dǎo)航 | 使用教程  [會(huì)員中心]

C語言課程設(shè)計(jì)學(xué)生成績管理系統(tǒng).doc

文檔格式:DOC| 29 頁|大小 151.69KB|積分 18|2019-10-08 發(fā)布|文檔ID:1128530
第1頁
下載文檔到電腦,查找使用更方便 還剩頁未讀,繼續(xù)閱讀>>
1 / 29
此文檔下載收益歸作者所有 下載文檔
  • 版權(quán)提示
  • 文本預(yù)覽
  • 常見問題
  • 信息技術(shù)工程學(xué)院C語言課程設(shè)計(jì)報(bào)告 題目:學(xué)生成績管理系統(tǒng)(student achievement management system) 目錄 一 設(shè)計(jì)目的 3二 課程設(shè)計(jì)的內(nèi)容 3三 課程設(shè)計(jì)的要求與數(shù)據(jù) 4四 課程設(shè)計(jì)應(yīng)完成的工作 4五 總體設(shè)計(jì)(包含幾大功能模塊) 5六 詳細(xì)設(shè)計(jì) 66.1各個(gè)模塊的功能和實(shí)現(xiàn) 66.2 流程圖 7(管理員模式流程圖) 7(來賓模式流程圖) 8 8七 調(diào)試分析(各模塊測試結(jié)果) 97.1源代碼 97.2 各模塊測試結(jié)果 24八 總結(jié) 29九 參考資料 30一 設(shè)計(jì)目的通過本課程設(shè)計(jì)鞏固《C語言程序設(shè)計(jì)》課程的教學(xué)成果,深入理解結(jié)構(gòu)體、指針、鏈表、動(dòng)態(tài)分配內(nèi)存和文件操作的等C程序設(shè)計(jì)中的中高級技術(shù),通過課程設(shè)計(jì)的綜合訓(xùn)練,培養(yǎng)學(xué)生實(shí)際分析問題、編程和動(dòng)手能力、提高學(xué)生利用C語言進(jìn)行程序設(shè)計(jì)的能力,初步培養(yǎng)良好的編程習(xí)慣和編程風(fēng)格,初步學(xué)習(xí)程序的文檔的撰寫方法二 課程設(shè)計(jì)的內(nèi)容通過C語言程序系統(tǒng),設(shè)計(jì)一個(gè)可以對學(xué)生的成績信息進(jìn)行管理的程序,其中學(xué)生的信息可以包括:學(xué)號、各科目的成績的平均分排序等,其功能可以包括學(xué)生成績的輸入、輸出、查詢、排序、刪除、統(tǒng)計(jì)、退出等。

    三 課程設(shè)計(jì)的要求與數(shù)據(jù)1、用C語言實(shí)現(xiàn)系統(tǒng);2、對學(xué)生信息(包括學(xué)號、姓名、語文、數(shù)學(xué)、英語、平均分)進(jìn)行管理,包括學(xué)生成績的信息輸入、輸出、查詢、刪除、排序、統(tǒng)計(jì)、退出、顯示,以及整個(gè)程序的切換登錄模式和修改管理員的信息.3、學(xué)生信息包括: (1)、每一條記錄包括一個(gè)學(xué)生的學(xué)號、姓名、3門課成績(2)、成績信息錄入功能:(成績信息用文件保存,可以一次完成若干條記錄的輸入)(3)、成績信息顯示瀏覽功能:完成全部學(xué)生記錄的顯示4)、查詢功能:完成按姓名查找學(xué)生記錄,并顯示5)、成績信息的刪除:按學(xué)號進(jìn)行刪除某學(xué)生的成績.(6)、排序功能:按學(xué)生平均成績進(jìn)行排序7)、應(yīng)提供一個(gè)界面來調(diào)用各個(gè)功能,調(diào)用界面和各個(gè)功能的操作界面應(yīng)盡可能清晰美觀!四 課程設(shè)計(jì)應(yīng)完成的工作(1)編寫算法;(2)算法測試,并有具體的測試結(jié)果和結(jié)果分析;(3)撰寫課程設(shè)計(jì)報(bào)告內(nèi)容包括:1) 封面扉頁2) 設(shè)計(jì)任務(wù)書3) 目錄4) 總體設(shè)計(jì)方案(包括流程圖)5) 使用說明及運(yùn)行實(shí)例(包括界面)6) 成員設(shè)計(jì)內(nèi)容簡介7) 項(xiàng)目源程序代碼(注意注釋的使用)8) 指導(dǎo)教師評語五 總體設(shè)計(jì)(包含幾大功能模塊)1、成績錄入功能2、成績輸出功能3、成績查詢功能4、刪除模塊 5、排序功能 6、統(tǒng)計(jì)功能 7、退出系統(tǒng)六 詳細(xì)設(shè)計(jì)6.1各個(gè)模塊的功能和實(shí)現(xiàn)(1)整個(gè)成績管理系統(tǒng)設(shè)計(jì)分為9個(gè)模塊:1.輸入學(xué)生成績2.刪除學(xué)生成績3.查詢學(xué)生成績4.修改學(xué)生成績5.排序?qū)W生成績6.保存記錄7.顯示所有8.退出系統(tǒng)9.修改管理員信息(2)(主要函數(shù)的功能) 1.主函數(shù)main():定義學(xué)生結(jié)構(gòu)體數(shù)組,調(diào)用錄入,統(tǒng)計(jì)等函數(shù)對成績表進(jìn)行處理。

    2.輸入數(shù)據(jù)函數(shù)input():輸入學(xué)號、成績 3.排序函數(shù)sort():對總成績或者平均成績,進(jìn)行排序,按從高到低或者從低到高 4.顯示數(shù)據(jù)函數(shù)display():顯示各個(gè)學(xué)生的總成績 5.新增數(shù)據(jù)函數(shù)insert():增加學(xué)生學(xué)生記錄 6.刪除數(shù)據(jù)函數(shù)del():由于各種原因,刪除某些同學(xué)的成績、學(xué)號等7.平均值函數(shù)average():求各個(gè)同學(xué)總成績的平均值8.查詢數(shù)據(jù)函數(shù)qur():查詢學(xué)生的信息 9.保存數(shù)據(jù)函數(shù)save():再一次打開界面是,仍有上次所找的訊息10.退出系統(tǒng)函數(shù)exit():當(dāng)要退出整個(gè)系統(tǒng)時(shí)6.2 流程圖(管理員模式流程圖)輸出菜單 輸入 根據(jù)菜單輸入n的值選擇程序結(jié)束開始保存查找退出刪除統(tǒng)計(jì)插入排序輸出開始(來賓模式流程圖) 輸出菜單根據(jù)菜單,選擇程序退出程序切換登錄排序成績顯示成績查詢成績 結(jié)束七 調(diào)試分析(各模塊測試結(jié)果)7.1源代碼#include#include#include#include#include#define HEADER2 " 學(xué)號 姓名 數(shù)學(xué) 英語 C語言 總分 平均分\n"#define FORMAT " %s %s %d %d %d %d %.2f\n"#define DATA p->data.num,p->data.name,p->data.mgrade,p->data.egrade,p->data.cgrade,p->data.total,p->data.aveint saveflag=0;typedef unsigned short WORD;struct student{ char num[10]; char name[15]; int mgrade; int egrade; int cgrade; int total; float ave;};typedef struct node{ struct student data; struct node *next;}Node,*Link;void menu(){ time_t now; now=time(NULL); printf(" 學(xué)生成績管理系統(tǒng) \n"); printf("\n"); printf(" *******************************************************************\n"); printf(" * *\n"); printf(" * 1 輸入成績 2 刪除成績 *\n"); printf(" * *\n"); printf(" * 3 查詢成績 4 修改成績 *\n"); printf(" * *\n"); printf(" * 5 排序成績 6 保存記錄 *\n"); printf(" * *\n"); printf(" * 7 顯示所有 0 退出系統(tǒng) *\n"); printf(" * *\n"); printf(" *******************************************************************\n"); printf(" * 8 切換登錄模式 9 修改管理員信息 *\n"); printf(" *******************************************************************\n"); printf("\n 請你選擇操作命令前的的數(shù)字(0~9):");}int menu2(){ //int select; time_t now; now=time(NULL); system("cls"); //清屏 printf("\n 學(xué)生模式\n\n\n"); printf(" 學(xué)生成績管理系統(tǒng) \n"); printf("\n"); printf(" *******************************************************************\n"); printf(" * *\n"); printf(" * 1 查詢成績 2 排序成績 *\n"); printf(" * *\n"); printf(" * 3 顯示所有 0 退出系統(tǒng) *\n"); printf(" * *\n"); printf(" *******************************************************************\n"); printf(" * 4 切換登錄模式 *\n"); printf(" *******************************************************************\n"); printf("\n 請你選擇操作命令前的數(shù)字(0~4):"); return 0;}void printheader(){ printf(HEADER2);}void printdata(Node *pp){ Node *p; p=pp; printf(FORMAT,DATA);}void Wrong(){ printf("\n\n\n\n************錯(cuò)誤:輸入不合法!!!*********\a\n"); getch();}void Nofind(){ printf("\n沒有該學(xué)生!!\n");}Node* locate(Link l,char findmess[],char nameornum[]){ Node *r; if(strcmp(nameornum,"num")==0) { r=l->next; while(r) { if(strcmp(r->data.num,findmess)==0) return r; r=r->next; } } else if(strcmp(nameornum,"name")==0) { r=l->next; while(r) { if(strcmp(r->data.name,findmess)==0) return r; r=r->next; } } return 0;}void stringinput(char*t,int lens,char*notice) { char n[225]; do { printf(notice); scanf("%s",n); if(strlen(n)>lens) printf("\n超出寬度!!!\n"); }while(strlen(n)>lens); strcpy(t,n); } int numberinput(char *notice) {int t=0; do { printf(notice); scanf("%d",&t); if(t>100||t<0) printf("\n 分?jǐn)?shù)必須在0~100之間!!!\n"); }while(t>100||t<0); return t; }void Disp(Link l){ Node *p; system("cls"); p=l->next; if(!p) { printf("\n目前無學(xué)生成績記錄!!\n"); getch(); return; } printf("\n\n"); printheader(); while(p) { printdata(p); p=p->next;//移至下一個(gè)結(jié)點(diǎn) }} void Add(Link l){ //printf("增加學(xué)生記錄模塊\n"); //system("PAUSE");} Node *p,*r,*s; char ch,flag=0,num[10]; r=l; system("cls"); Disp(l);//先打印已有的學(xué)生信息 while(r->next!=NULL) r=r->next;//將只指針移至鏈表末尾,準(zhǔn)備添加記錄 while(1)//一次可輸入條記錄,直至輸入的學(xué)號我0的記錄節(jié)點(diǎn)添加操作 { s=l->next; while(1) { stringinput(num,10,"學(xué)號(按0退出):"); flag=0; if(strcmp(num,"0")==0) return; s=l->next; while(s)//查詢學(xué)號是否存在,若存在則要求重新輸入 { if(strcmp(s->data.num,num)==0) { flag=1; break; } s=s->next; } if(flag==1)//提示用戶是否重新輸入 { getchar(); printf("=====>學(xué)號%s已存在,是否重新輸入?(y/n)\a:",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else return ; } else break; } p=(Node *)malloc(sizeof(Node)); strcpy(p->data.num,num);//將字符串mun拷貝到p->data.num中 stringinput(p->data.name,15,"name:"); p->data.cgrade=numberinput("c語言[0-100]:"); p->data.mgrade=numberinput("數(shù)學(xué)[0-100]:"); p->data.egrade=numberinput("英語[0-100]:"); p->data.total=p->data.cgrade+p->data.mgrade+p->data.egrade; p->data.ave=(float)(p->data.total/3); p->next=NULL; while(r->next!=NULL) r=r->next; r->next=p; saveflag=1; } }void Del(Link l){ // printf("刪除學(xué)生記錄模塊\n"); //system("PAUSE"); int sel; Node *p,*r; char findmess[20]; if(!l->next) { system("cls"); printf("\n======>暫無學(xué)生記錄!!\n"); getch(); return; } system("cls"); Disp(l); printf("\n 1通過學(xué)號刪除 2通過姓名刪除\n"); printf(" 請選擇[1,2]"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"請輸入學(xué)號:"); p=locate(l,findmess,"num"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p);//釋放內(nèi)存空間 printf("\n刪除成功!\n"); saveflag=1; } else Nofind(); } else if(sel==2) { stringinput(findmess,15,"請輸入學(xué)生姓名:"); p=locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("\n刪除成功!!\n"); saveflag=1; } else Nofind();}else Wrong();getch();} void Qur(Link l){ int select; char searchinput[20]; Node *p; system("cls"); if(!l->next) { printf("\n暫無學(xué)生記錄!!\n"); return; } printf("\n=======>1通過學(xué)號查找 =======>2通過姓名查找\n"); printf("請選擇[1~2]:"); scanf("%d",&select); if(select==1) { stringinput(searchinput,10,"請輸入要查找的學(xué)號:"); p=locate(l,searchinput,"num"); if(p) {printheader(); printdata(p); } else Nofind(); } else if(select==2) { stringinput(searchinput,15,"請輸入學(xué)生姓名:"); p=locate(l,searchinput,"name"); if(p) { printheader(); printdata(p); } else Nofind(); } else Wrong(); system("PAUSE"); } void Modify(Link l){ Node *p; char findmess[20]; if(!l->next) { system("cls"); printf("\n沒有該學(xué)生記錄!\n"); getch(); return; } system("cls"); printf("修改學(xué)生記錄"); Disp(l); stringinput(findmess,10,"請輸入學(xué)號:"); p=locate(l,findmess,"num"); if(p) { printf("學(xué)號:%s,\n",p->data.num); printf("姓名:%s,",p->data.name); stringinput(p->data.name,15,"輸入新的姓名:"); printf("c語言:%d,",p->data.cgrade); p->data.cgrade=numberinput("c語言[0~100]:"); printf("數(shù)學(xué):%d,",p->data.mgrade); p->data.mgrade=numberinput("數(shù)學(xué)[0~100]:"); printf("英語:%d,",p->data.egrade); p->data.egrade=numberinput("英語[0~100]:"); p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=(float)(p->data.total)/3; printf("\n===>修改成功!"); saveflag=1; } else Nofind(); getch(); } void Sort(Link l){ Link ll; Node *p,*rr,*s; int i=0; system("cls"); if(l->next==NULL) { printf("\n暫無學(xué)生記錄!\n"); return; } ll=(Node*)malloc(sizeof(Node));//用于創(chuàng)建新的節(jié)點(diǎn) ll->next=NULL; printf("當(dāng)前狀態(tài):\n"); Disp(l); system("PAUSE"); p=l->next; while(p) { s=(Node*)malloc(sizeof(Node)); s->data=p->data; s->next=NULL; rr=ll; while(rr->next!=NULL &&rr->next->data.total>=p->data.total) { rr=rr->next; } if(rr->next==NULL) rr->next=s; else { s->next=rr->next; rr->next=s; } p=p->next; } l->next=ll->next; p=l->next; while(p!=NULL) { i++; p=p->next; } printf("\n******************************\n"); Disp(l); saveflag=1; printf("\n ******排序完成******* \n"); system("PAUSE"); } void Save(Link l){ //printf("保存模塊\n"); //system("PAUSE"); FILE *fp; Node *p; int count=0; fp=fopen("student.txt","wb"); p=l->next; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1) { p=p->next; count++; } else break; } if(count>0) { printf("\n\n\n\n\n 保存完畢,當(dāng)前共有%d名學(xué)生記錄\n",count); saveflag=0; } else printf("空文件,保存失敗!!\n"); fclose(fp);//關(guān)閉文件 getch();}int login() { FILE *fp1,*fp2; int state; char str1[20],str2[20],str_z[20],str_m[7]; if((fp1=fopen("admin.txt","rb"))==NULL) { printf("本系統(tǒng)無管理員,請創(chuàng)建!\n\n請輸入管理員賬號:"); scanf("%s",str_z); printf("請?jiān)O(shè)置一個(gè)六位數(shù)密碼:"); fp2=fopen("admin.txt","wb"); fprintf(fp2,"%s%c",str_z,'\n'); fprintf(fp2,"%s%c",str_m,' '); fclose(fp2); } fp1=fopen("admin.txt","rb"); fscanf(fp1,"%s",str1); fscanf(fp1,"%s",str2); fclose(fp1); while(1) { printf("請選擇你的登錄方式:\n\n"); printf("1.管理員模式 0.來賓模式\n"); printf("請選擇:(0~1)"); scanf("%d",&state); if(state==0) return 0; else if(state==1) { printf("請輸入賬號:"); scanf("%s",str_z); if (strcmp(str1,str_z)==0&&strcmp(str2,str_m)==0) return 1; else { printf("賬號或密碼錯(cuò)誤!!!\a\n"); system("PAUSE"); system("cls"); } } else { printf("輸入不合法!!!\a\n"); exit(0); } } } void Modify_admin() { FILE *fp; char str_z[20],str_m[7]=""; fp=fopen("admin.txt","wb"); printf("請輸入管理員賬號:"); scanf("%s",str_z,'\n'); printf("請輸入密碼:"); fprintf(fp,"%s%c",str_z,'\n'); fprintf(fp,"%s%c",str_m,' '); fclose(fp); printf("管理員信息更新完畢!! \a\n"); getch(); } int main(){ Link L; FILE *fp; int select,State=0; char ch,admin[20],admin_p[20]; int count=0; Node *p,*r; system("color 0A"); L=(Node*)malloc(sizeof(Node)); L->next=NULL; r=L; fp=fopen("student.txt","ab+"); Loop:{ State=login(); } while(!feof(fp)) {p=(Node*)malloc(sizeof(Node)); if(fread(p,sizeof(Node),1,fp)==1) { p->next=NULL; r->next=p; r=p; count++; } } fclose(fp); if(State==1) { while(1) { system("cls"); printf("\n 管理員模式\n\n"); menu(); p=r; scanf("%d",&select); if(select==0) { if(saveflag==1) { getchar(); printf("\n記錄已修改,是否保存當(dāng)時(shí)記錄?(y/n):"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(L); } printf("謝謝您的使用!!!\n"); break; } switch(select) { case 1:Add(L);break;//增加模塊 case 2:Del(L);break;//刪除記錄 case 3:Qur(L);break;//查詢模塊 case 4:Modify(L);break;//修改模塊 case 5:Sort(L);break;//排序模塊 case 6:Save(L);break;//保存成績 case 7:Disp(L);system("PAUSE");break;//顯示成績 case 8:system("cls");goto Loop; case 9:Modify_admin();break; default:Wrong();getch();break; } } } else { while(1) { system("cls"); menu2(); scanf("%d",&select); if(select==0) { printf("謝謝您的使用?。n"); exit(1); } switch(select) { case 1:Qur(L);break; case 2:Sort(L);break; case 3:Disp(L);system("PAUSE");break; case 4:system("cls");goto Loop; default:Wrong();getch();break; } } }return 0;}7.2 各模塊測試結(jié)果創(chuàng)建管理員模塊主界面模塊輸入成績模塊刪除成績模塊查詢成績模塊修改成績模塊排序成績模塊保存記錄模塊切換登陸模式修改管理員信息退出系統(tǒng)八 總結(jié)本次的課程設(shè)計(jì)已接近尾聲,經(jīng)過兩周的課程設(shè)計(jì)的學(xué)習(xí),讓我從中收獲了許多的東西,課程開始,由于許多東西的在大一學(xué)習(xí)C語言時(shí)理解不深入,在此次設(shè)計(jì)中遇到許許多多的問題,調(diào)試分析時(shí)會(huì)出現(xiàn)各種各樣的錯(cuò)誤,也就需要自己查閱更多的資料。

    通過查資料,修改源代碼,調(diào)試分析,再到逐步完善的過程,似乎每一次的實(shí)驗(yàn)結(jié)果的成功,我都把它當(dāng)做是一次成長回想起這兩周的課程學(xué)習(xí),讓我真正體會(huì)到了理論與實(shí)踐相結(jié)合的重要性,從拿到一個(gè)設(shè)計(jì)題目,再到對題目的構(gòu)思、畫流程圖,到最后的編寫源代碼、調(diào)試分析、逐步完善、最后的整個(gè)程序的完成,看似一個(gè)很簡單的過程,但是對于一個(gè)初次接觸的我來說,每次似乎都是遇到了一個(gè)大困難但是越是遇到困難,就越有解決問題的決心,每當(dāng)遇到問題時(shí),我都會(huì)及時(shí)的向老師、同學(xué)、還有圖書館的相關(guān)書籍尋求幫助努力做到問題的及時(shí)解決通過這次課程設(shè)計(jì)收獲知識,提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒因此在以后的生活和學(xué)習(xí)的過程中,我一定會(huì)把課程設(shè)計(jì)的精神帶到生活中,不畏艱難,勇往直前使我對C語言有了更進(jìn)一步的認(rèn)識和了解,要想學(xué)好它要重在實(shí)踐,要通過不斷的上機(jī)操作才能更好地學(xué)習(xí)它、利用它來為自己創(chuàng)造財(cái)富在這里,感謝帶我我們做課程設(shè)計(jì)的張老師!九 參考資料《C語言程序設(shè)計(jì)》 主編:譚浩強(qiáng);《C程序設(shè)計(jì)教程》 主編:李麗娟;《C語言程序設(shè)計(jì)》 主編:樓永強(qiáng),吳鵬,徐思友;《C語言程序設(shè)計(jì)》 主編:吳紅慶,李春萍;網(wǎng)絡(luò)相關(guān)資料。

    點(diǎn)擊閱讀更多內(nèi)容
    賣家[上傳人]:最優(yōu)資源
    資質(zhì):實(shí)名認(rèn)證