學生學籍信息管理系統-C語言設計_第1頁
學生學籍信息管理系統-C語言設計_第2頁
學生學籍信息管理系統-C語言設計_第3頁
學生學籍信息管理系統-C語言設計_第4頁
學生學籍信息管理系統-C語言設計_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

學生學籍信息管理系統目錄1.設計目的與要求2.總體設計3.詳細設計4.調試分析5.總結6.辯論記錄7.教師意見8.附錄主程序1.設計目的與要求:1.1【要求】:使用下面的數據,設計一個簡單的學籍信息管理系統。學生根本信息文件(A.TXT)及其內容:A.TXT文件不需要編程錄入數據,可用文本編輯工具直接生成學號姓名性別宿舍號碼號碼01張成成男5018773211102李成華女1018772311203王成鳳女1018772311204張明明男5028773433305陳東男5018773211106李果男5028773433307張園園女10287756122學生成績根本信息文件(B.TXT)及其內容學號課程編號課程名稱學分平時成績實驗成績卷面成績綜合成績學分01A01大學物理366788202B03高等數學478-19001B03高等數學445-18802C01VF3657666功能要求及說明:數據錄入功能:對B.TXT進行數據錄入,只錄入每個學生的學號、課程編號、課程名稱、學分、平時成績、實驗成績、卷面成績共7個數據.綜合成績、學分由程序根據條件自動運算。綜合成績的計算:如果本課程的實驗成績為-1,那么表示無實驗,綜合成績=平時成績*30%+卷面成績*70%;如果實驗成績不為-1,表示本課程有實驗,綜合成績=平時成績*15%+實驗成績*.15%+卷面成績*70%。實綜合成績在90-100之間,應得學分=學分*100%得學分的計算:采用等級學分制.綜合成績在80-90之間,應得學分=學分*80%綜合成績在70-80之間,應得學分=學分*75%綜合成績在60-70之間,應得學分=學分*60%綜合成績在60以下,應得學分=學分*0%〔2〕查詢功能:分為學生根本情況查詢和成績查詢兩種A:學生根本情況查詢:A1----輸入一個學號或姓名〔可實現選擇〕,查出此生的根本信息并顯示輸出。A2---輸入一個宿舍號碼,可查詢出本室所有的學生的根本信息并顯示輸出。B:成績查詢:B1:輸入一個學號時,查詢出此生的所有課程情況,格式如下:學號:xx姓名:xxxxx課程編號:xxx課程名稱:xxxxx綜合成績:xxxx實得學分:xx課程編號:xxx課程名稱:xxxxx綜合成績:xxxx實得學分:xx課程編號:xxx課程名稱:xxxxx綜合成績:xxxx實得學分:xx共修:xx科,實得總學分為:xxx〔3〕刪除功能:當在A.TXT中刪除一個學生時,自動地在B.TXT中刪除此人所有信息。〔4〕排序功能:能實現選擇按綜合成績或實得學分升序或降序排序并顯示數據1.2【目的】:實現對于學生學籍信息的查詢以及管理。自動錄入,方便快捷。數據錄入功能,綜合成績的計算,查詢功能〔學生根本情況查詢,成績查詢〕,刪除功能,排序功能等為一體。使學生學籍和成績等信息實現信息化快捷管理。2.總體設計:經過分析整個系統,可以將系統分為五大模塊:信息輸入模塊,信息修改模塊,信息排序模塊,設備查找模塊和退出模塊。其中主要是前五大個模塊。所用到的各個子函數所用到的各個子函數讀取數據、計算菜單顯示數據錄入排序查詢讀取數據、計算菜單顯示數據錄入排序查詢按實際學分按綜合成績查詢成績查詢學生信息按實際學分按綜合成績查詢成績查詢學生信息3.詳細設計:3.1主函數://******主函數******#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>voidmenu(){intc,w1;do{puts("\t\t*********************MENU*********************\n\n");puts("\t\t\t\t1.Inputdata");/*輸入模塊*/puts("\t\t\t\t2.Searchdata");/*查找模塊*/puts("\t\t\t\t3.Deletedata");/*刪除模塊*/puts("\t\t\t\t4.Sortdata");/*排序模塊*/puts("\t\t\t\t5.Exit");/*退出*/puts("\n\n\t\t**********************************************\n");printf("Choicenumber(1-5):[]\b\b");scanf("%d",&c);if(c<1||c>6) { w1=1;getchar(); }elsew1=0;}while(w1==1);switch(c){case1:enter();break;case2:search();break;case3:del();break;case4:sort();break;case5:exit(0);break;}}voidmain(){menu();}3.2公共函數:所用到的六個公共函數所用到的六個公共函數一個函數結束時的選擇瀏覽還是返回的函數顯示數據結構工程的函數保存文件B函數加載文件B函數 保存文件A函數加載文件A函數一個函數結束時的選擇瀏覽還是返回的函數顯示數據結構工程的函數保存文件B函數加載文件B函數 保存文件A函數加載文件A函數intload_info()/*A文件加載函數*/{inti;FILE*fp;if((fp=fopen("A.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++)fscanf(fp,"%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);return(i);}intsave_info(intn)/*A文件保存函數*/{inti;FILE*fp;if((fp=fopen("A.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<n;i++)if(strcmp(stu[i].num,"-1")!=0)fprintf(fp,"%s%s%s%s%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);}intload_score()/*B文件加載函數*/{floatca_mark(inti);voidca_score(inti);inti,j;FILE*fp;if((fp=fopen("B.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++){fscanf(fp,"%s%s%s%d",scr[i].num,scr[i].subnum,scr[i].subject,&scr[i].oscore);for(j=0;j<3;j++)fscanf(fp,"%d",&scr[i].mark[j]);ca_mark(i);ca_score(i);}fclose(fp);return(i);}intsave_score(intm)/*B文件保存函數*/{inti,j;FILE*fp;if((fp=fopen("B.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<m;i++){if(strcmp(scr[i].num,"-1")!=0) {fprintf(fp,"%s%s%s%d%d%d%d%d%d\n",scr[i].num,scr[i].subnum,scr[i].subject,scr[i].oscore,scr[i].mark[0],scr[i].mark[1],scr[i].mark[2],(int)scr[i].totalmark,(int)scr[i].gscore); }}fclose(fp);}voidprintone(inti)/*顯示數據結構工程的函數(公共函數)*/{printf("\n\t%-4s\t%-6s\t%-4s\t%-8s\t%-8s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);}voidprintface()/*公共函數,一個函數結束時的選擇瀏覽還是返回的函數*/{printf("\n\t學號\t姓名\t性別\t宿舍號碼\t號碼\n");}3.3功能模塊的設計://///*******信息刪除模塊********開始開始數據刪除結束輸入學號voiddel()//刪除模塊{voidmenu();inti,j,c,flag=0;chars[6];printface();for(i=0;i<n;i++)printone(i);puts("\n\n");printf("\nInputthedeletenumber:");scanf("%s",s); printf("\n\nSure?\t1).Sure\t2).No\t3).Back\t[]\b\b");scanf("%d",&c);if(c==1)for(i=0;i<n;i++)if(judge(s,stu[i].num)) { flag=1;strcpy(stu[i].num,"-1");for(j=0;j<m;j++)if(judge(s,scr[i].num))strcpy(scr[i].num,"-1"); break; }if(flag==0){puts("\n\tNotexist!\n");choice_menu(5);}if(c==2){puts("\n\n");del();}if(c==3){puts("\n\n");menu();}save_info(n);save_score(m);load_info();load_score();puts("\n\n\tSuccessfully!.^_^.\n");choice_menu(5);}/////*******開始數據排序開始數據排序X=1?實際學分排序綜合成績排序結束YNvoidsort()//排序模塊{voidmenu();intc,k,v; printf("\n\nChoicenumber:1).綜合成績\t2).實得學分\t[]\b\b");scanf("%d",&c);list_subject();scanf("%d",&k);printf("\n\nChoice:1).從高到低\t2).從低到高\t[]\b\b");scanf("%d",&v);sortmark(c,k,v);}voidsortmark(intc,intk,intv){ char*num_name(chars[]);intjudge(chara[],charb[]);chars[4];inti,j=0,i1,j1,k1;structscore*p[100],*t;switch(k){case1:strcpy(s,"A01");break;case2:strcpy(s,"B03");break;case3:strcpy(s,"C01");break;case4:strcpy(s,"D02");break;}for(i=0;i<m;i++)p[i]=NULL;for(i=0;i<m;i++)if(judge(s,scr[i].subnum)){p[j]=&scr[i];j++;}for(i1=0;i1<j-1;i1++){k1=i1;if(c==1)for(j1=i1+1;j1<j;j1++)if(p[k1]->totalmark<p[j1]->totalmark)k1=j1;if(c==2)for(j1=i1+1;j1<j;j1++)if(p[k1]->gscore<p[j1]->gscore)k1=j1;if(i1!=k1){t=p[i1];p[i1]=p[k1];p[k1]=t;}}puts("\n名次姓名\t平時成績實驗成績卷面成績綜合成績實得學分");if(v==1)for(i=0;i<j;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);if(v==2)for(i=j-1;i>=0;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);}4.調試分析4.1主函數:4.2排序模塊4.3刪除模塊4.4退出5.總結先就在本程序的編寫過程中出現的問題進行說明:首先,對于數據的刪除存在一定的問題,這個問題是在老師的指導下又經過同學們的幫助才解決的,其間,我明白了結構體數組中數據刪除的根本原理和刪除的方法;其次,在程序編寫過程中,我無視了幾個需要注意的根本語法,比方,有的變量忘記了定義和標識符的使用等問題,這個是在同學的幫助下才檢查出來改正的。這屬于C語言運用的根底問題,也是因為平時的上機編程實習太少所致,以后還有待于改良;第三,對于數組中數據的存儲原理存在一定的疑問,這個是請同學講解后才加深的理解;第四,就是在程序開始編寫時,整體思路框架的構思感覺無從下手,這是一個長期的問題,需要多多接觸程序,理解更多的程序編寫思路才能做到在白那些之前胸有成竹。這次是請教同學幫助才得以解決的。這是我第一次相比照擬獨立的編程,從中感受到了小小的進步所帶來的喜悅,更重要的是,通過這次C語言課程設計我意識到了自己在學習上的許多缺乏,許多感覺會的知識在應用時還是有許多不確定,學習C語言,動手能力是很重要的,只要通過實踐才能真正發現自己的缺乏,使自己的能力真正有所提高。俗話說:“萬事開頭難。〞現在既然開頭已經過去了,也大致了解了C語言的學習規律,課本雖然學完了,但自己需要加強與完善的還有很多。首先,從這個程序說起。這個程序的編寫過程中沒有用到很特殊的算法,根本都是老師上課強調的一些根本算法,讓人做起來感覺還是挺簡單易懂的,這里也體會到了C語言的靈活性。其次,我認為我這個程序的亮點在于它的整體結構清晰明朗,首先是兩個結構體,然后就是聲明函數,再往下是主函數選擇執行命令,最后是幾個用到的被調用函數。再次,我體會到了計算機語言的嚴謹性,C語言課本上的許多微小知識看似微乎其微,實那么作用巨大,在程序設計過程中,一處小小的知識死角就可能會使整個程序無法運行,所以計算機語言的學習容不得半點兒馬虎,留不得半處死角,不能無視任何一處知識。此次課程設計,我在編寫程序,修改程序進一步完成作業的同時,也深深感受到了計算機高級語言的清晰的層次性和運用的技巧性,我想這一點無論對于我們這些初涉計算機語言的學生而言,還是對于已在計算機專業任教多年的資深教師來說,都是必須認識到的。認識到這一點,計算機初學者可以在穩固根底的同時培養探索更加簡潔的思路的意識,資深教師那么可以在計算機語言教授過程中起到提綱挈領,誘思探究新的教學方法,使學生在學習計算機語言的時候抓住重點,理解難點,掌握要點。姓名:黃樊學號:051111272023-9-6辯論記錄教師意見附錄一:源程序代碼#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>intn,m;structstudent{charnum[6];charname[20];charsex[3];charroom[5];chartel[10];}stu[10];structscore{ charnum[6];charsubnum[4];charsubject[10];intoscore;intmark[3];floattotalmark;floatgscore;}scr[60];floatca_mark(inti){if(scr[i].mark[1]==-1)scr[i].totalmark=0.3*scr[i].mark[0]+0.7*scr[i].mark[2];elsescr[i].totalmark=0.15*(scr[i].mark[0]+scr[i].mark[1])+0.7*scr[i].mark[2];return(scr[i].totalmark);}voidca_score(inti){intc;c=(int)ca_mark(i)/10;if(c<6)c=5;switch(c){case10:case9:scr[i].gscore=scr[i].oscore;break;case8:scr[i].gscore=0.8*scr[i].oscore;break;case7:scr[i].gscore=0.75*scr[i].oscore;break;case6:scr[i].gscore=0.6*scr[i].oscore;break;case5:scr[i].gscore=0;break;}}intload_info()//加載函數{inti;FILE*fp;if((fp=fopen("A.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++)fscanf(fp,"%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);return(i);}intsave_info(intn)//保存函數{inti;FILE*fp;if((fp=fopen("A.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<n;i++)if(strcmp(stu[i].num,"-1")!=0)fprintf(fp,"%s%s%s%s%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);}intload_score()//加載函數{floatca_mark(inti);voidca_score(inti);inti,j;FILE*fp;if((fp=fopen("B.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++){fscanf(fp,"%s%s%s%d",scr[i].num,scr[i].subnum,scr[i].subject,&scr[i].oscore);for(j=0;j<3;j++)fscanf(fp,"%d",&scr[i].mark[j]);ca_mark(i);ca_score(i);}fclose(fp);return(i);}intsave_score(intm)//保存函數{inti,j;FILE*fp;if((fp=fopen("B.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<m;i++){if(strcmp(scr[i].num,"-1")!=0) {fprintf(fp,"%s%s%s%d%d%d%d%d%d\n",scr[i].num,scr[i].subnum,scr[i].subject,scr[i].oscore,scr[i].mark[0],scr[i].mark[1],scr[i].mark[2],(int)scr[i].totalmark,(int)scr[i].gscore); }}fclose(fp);}voidprintone(inti){printf("\n\t%-4s\t%-6s\t%-4s\t%-8s\t%-8s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);}voidprintface(){printf("\n\t學號\t姓名\t性別\t宿舍號碼\t號碼\n");}voidlist_subject(){puts("\n\nChoicesubject:\n");printf("\t1).大學物理\t2).高等數學\t3).VF\t4).大學英語\n");printf("\nChoicenumber(1-4):[]\b\b");}voidsortmark(intc,intk,intv){ char*num_name(chars[]);intjudge(chara[],charb[]);chars[4];inti,j=0,i1,j1,k1;structscore*p[100],*t;switch(k){case1:strcpy(s,"A01");break;case2:strcpy(s,"B03");break;case3:strcpy(s,"C01");break;case4:strcpy(s,"D02");break;}for(i=0;i<m;i++)p[i]=NULL;for(i=0;i<m;i++)if(judge(s,scr[i].subnum)){p[i]=&scr[i];j++;}for(i1=0;i1<j-1;i1++){k1=i1;if(c==1)for(j1=i1+1;j1<j;j1++)if(p[k1]->totalmark<p[j1]->totalmark)k1=j1;if(c==2)for(j1=i1+1;j1<j;j1++)if(p[k1]->gscore<p[j1]->gscore)k1=j1;if(i1!=k1){t=p[i1];p[i1]=p[k1];p[k1]=t;}}puts("\n名次姓名\t平時成績實驗成績卷面成績綜合成績實得學分");if(v==1)for(i=0;i<j;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);if(v==2)for(i=j-1;i>=0;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);}intjudge(chara[],charb[]){if(strcmp(a,b)==0)return1;elsereturn0;}char*num_name(chars[]){char*p;inti;for(i=0;i<n;i++)if(judge(s,stu[i].num)) { p=stu[i].num+6;return(p);break; }}voidsearchone(intk){voidchoice_menu(intk);chars[20];inti,flag=0;if(k==1){printf("\nInputthenumber:");}if(k==2){printf("\nInputthename:");}scanf("%s",s);for(i=0;i<n;i++){ if(k==1) if(judge(s,stu[i].num)) {printface();printone(i); flag=1;puts("\n\n\tSuccessfully!\n");choice_menu(k); }if(k==2)if(judge(s,stu[i].name)) {printface();printone(i); flag=1;puts("\n\n\tSuccessfully!\n");choice_menu(k); }}if(flag==0&&k==1)puts("\n\n\tNotexist!\n");if(flag==0&&k==2)puts("\n\n\tNotexist!\n");choice_menu(k);}voidsearchroom()//按寢室查詢{voidchoice_menu(intk);inti,flag=0;chars[3];printf("\nInputtheroomnumber:");scanf("%s",s);printface();for(i=0;i<n;i++)if(judge(s,stu[i].room)){printone(i);flag=1;}puts("\n");if(flag==0)puts("\n\n\tNotexist!\n");choice_menu(3);}voidsearch_onescore()//成績查詢{voidchoice_menu(intk);inti,j=0,flag=0;chars[6];floatsum;printf("\nInputthenumber:");scanf("%s",s);for(i=0,sum=0;i<m;i++){if(judge(s,scr[i].num)) {if(j==0)printf("\n\n學號:%-6s\t姓名:%s",s,num_name(s));printf("\n課程編號:%-6s\t課程名稱:%-10s\t綜合成績:%-6.2f\t實得學分:%-4.2f",scr[i].subnum,scr[i].subject,scr[i].totalmark,scr[i].gscore);sum+=scr[i].gscore;flag=1;j++; }}if(flag==1)printf("\n共修:%d科,實得總學分為:%-6.2f\n",j,sum);if(flag==0)puts("\n\nNotexist!\n");choice_menu(4);}voidsearch_choice(intk)//查找選項{voiddel();switch(k){case1:case2:searchone(k);break;case3:searchroom();break;case4:search_onescore();break;case5:del();break;}}voidsearch_info(){voidsearch_person();voidsearch();intc;puts("\t\t\t\t1.Byperson");puts("\t\t\t\t2.Byroom");puts("\t\t\t\t3.Back");printf("\n\nChoicenumber(1-3):[]\b\b");scanf("%d",&c);switch(c){case1:search_person();break;case2:searchroom();break;case3:search();}}voidsearch_person()//按人查找{intc;puts("\t\t\t\t1.Bynumber");puts("\t\t\t\t2.Byname");puts("\t\t\t\t3.Back");printf("\n\nChoicenumber(1-3):[]\b\b");scanf("%d",&c);switch(c){case1:case2:searchone(c);break;case3:search_info();}}voidchoice_menu(intk){voidsearch();voidmenu();voidmenu();intc,w;puts("\nWhatdoyouwanttodo?:\n");switch(k){case1:puts("\n\t1).繼續按學號查詢");break;case2:puts("\n\t1).繼續按姓名查詢");break;case3:puts("\n\t1).繼續按宿舍號碼查詢");break;case4:puts("\n\t1).繼續查詢成績");break;case5:puts("\n\t1).continue");break;}printf("\t2).Return\n\t3).Backtomenu\n\n\tChoicenumber:[]\b\b");scanf("%d",&c);switch(c){case1:search_choice(k);break;case2:search();break;case3:menu();break;}}voidenter()//錄入模塊{voidmenu();n=load_info();m=load_score();puts("\nSuccessful!.^_^.\nPressanykeytocontinue...");getch();menu();}voidsearch()//查找菜單{voidmenu();intc;puts("\t\t\t\t1.Basicinformation");puts("\t\t\t\t2.Searchscore");puts("\t\t\t\t3.Back");printf("\n\nChoicenumber(1-3):[]\b\b");scanf("%d",&c);switch(c){case1:search_info();break;case2:search_onescore();break;case3:menu();}}voiddel()//刪除模塊{voidmenu();inti,j,c,flag=0;chars[6];printface();for(i=0;i<n;i++)printone(i

溫馨提示

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

評論

0/150

提交評論