版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> C語(yǔ)言程序設(shè)計(jì)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 設(shè)計(jì)題目:班級(jí)學(xué)生成績(jī)管理系統(tǒng)</p><p> 專(zhuān) 業(yè): </p><p> 班 級(jí): </p><p>
2、 學(xué) 號(hào): </p><p> 姓 名: </p><p> 指導(dǎo)教師: </p><p> 時(shí)間:2011/06/12</p><p> 目 錄</p><p> 課程設(shè)計(jì)目的和要求……………………3</p><p&g
3、t; 課程設(shè)計(jì)任務(wù)內(nèi)容………………………4</p><p> 程序流程圖………………………………16</p><p> 軟件使用說(shuō)明……………………………17</p><p> 課程設(shè)計(jì)心得與體會(huì)……………………19</p><p> 一. 課程設(shè)計(jì)的目的和要求</p><p> 目的:本課程設(shè)計(jì)是計(jì)算機(jī)科
4、學(xué)與技術(shù)專(zhuān)業(yè)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計(jì)語(yǔ)言(C)》課程后進(jìn)行的一次全面的綜合練習(xí)。本課程設(shè)計(jì)的目的和任務(wù):</p><p> 1. 鞏固和加深學(xué)生對(duì)C語(yǔ)言課程的基本知識(shí)的理解和掌握</p><p> 2. 掌握C語(yǔ)言編程和程序調(diào)試的基本技能</p><p> 3. 利用C語(yǔ)言進(jìn)行基本的軟件設(shè)計(jì)</p><p> 4
5、. 掌握書(shū)寫(xiě)程序設(shè)計(jì)說(shuō)明文檔的能力</p><p> 5. 提高運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的能力</p><p><b> 程序功能和要求:</b></p><p><b> 學(xué)生記錄用結(jié)構(gòu)體</b></p><p> 學(xué)生信息數(shù)據(jù)用文件保存</p><p> 采用多文
6、件形式組織程序</p><p><b> 基本功能:</b></p><p><b> 增加學(xué)生記錄</b></p><p><b> 文件存儲(chǔ)</b></p><p><b> 讀取文件</b></p><p><b
7、> 刪除記錄 </b></p><p><b> 修改記錄</b></p><p><b> 查詢(xún)記錄 </b></p><p><b> 5.程序簡(jiǎn)潔易懂</b></p><p> 二.課程設(shè)計(jì)任務(wù)和內(nèi)容</p><p>&
8、lt;b> 代碼:</b></p><p> #ifndef H_STUDENT_HH</p><p> #define H_STUDENT_HH</p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p&
9、gt; #include<conio.h></p><p> #include<string.h></p><p> #define NUM_SUBJECT 5 //科目數(shù)</p><p> #define INITIAL_SIZE 100 //數(shù)組初始大小</p><
10、p> #define INCR_SIZE 50 //數(shù)組每次增加的大小</p><p> struct student_info{</p><p> char number[15]; //學(xué)號(hào)</p><p> char name[20]; //姓名</p&g
11、t;<p> char gender[4]; //性別</p><p> float score[NUM_SUBJECT]; //某學(xué)生的各科成績(jī)</p><p> float sum; //總分</p><p> float average;
12、 //平均分</p><p> int index; //名次</p><p><b> };</b></p><p> typedef struct student_info StuInfo;</p><p> extern int numStus;
13、 //記錄的學(xué)生數(shù)</p><p> extern StuInfo* records; //記錄學(xué)生信息的數(shù)組</p><p> extern char savedTag; //信息是否保存</p><p> extern int arraySize; //數(shù)組大小<
14、;/p><p> extern char* subject[];</p><p> void handle_menu(void);</p><p> int menu_select(void);</p><p> void addRecord(void);</p><p> void modifyRecord(v
15、oid);</p><p> void display(void);</p><p> void queryInfo(void);</p><p> void removeRecord(void);</p><p> int saveRecords(void);</p><p> int loadRecord
16、s(void);</p><p> void quit(void);</p><p> void showTable(void);</p><p> int findRecord(char* target,int targetType,int from);</p><p> void copyRecord(StuInfo* src,S
17、tuInfo* dest);</p><p> void sortInfo(void);</p><p> int findRecord(char* target,int targetType,int from);</p><p> int getIndex(float);</p><p> #endif // H_STUDENT_
18、HH</p><p> #include "student.h"</p><p> //******************輸出表頭**********************</p><p> void showTable(void)</p><p><b> {</b></p>
19、<p><b> int j;</b></p><p> printf("學(xué)號(hào)\t姓名\t性別");</p><p> for(j=0;j<NUM_SUBJECT;j++)</p><p> printf(" %s ",subject[j]);</p><
20、p> printf(" 總分 平均分 名次\n");</p><p><b> }</b></p><p> //****************顯示所有學(xué)生信息函數(shù)******************</p><p> void display(void)</p><p>&
21、lt;b> {</b></p><p><b> int i,j;</b></p><p> if(numStus==0)</p><p><b> {</b></p><p> printf("沒(méi)有可供顯示的記錄!");</p><
22、;p><b> return;</b></p><p><b> }</b></p><p> showTable();</p><p> for(i=0;i<numStus;i++)</p><p><b> {</b></p><p
23、> printf("%4s\t%3s\t%3s",records[i].number,records[i].name,records[i].gender);</p><p> for(j=0;j<NUM_SUBJECT;j++)</p><p> printf("\ %.1f ",records[i].score[j]);<
24、/p><p> printf(" %.1f %.1f %d\n",records[i].sum,records[i].average,records[i].index);</p><p> if(i%19==0 && i!=0)</p><p><b> {</b></p>&l
25、t;p> printf("輸入一行字符后繼續(xù)...\n");</p><p><b> getch();</b></p><p> printf("\n\n");</p><p> showTable();</p><p><b> }</b>
26、</p><p><b> }</b></p><p><b> }</b></p><p> //*******************在當(dāng)前表的末尾增加新的信息*************************</p><p> void addRecord(void)</p>
27、;<p><b> {</b></p><p> char str[10];</p><p><b> int j;</b></p><p> float mark,sum;</p><p> if(numStus==0)</p><p> prin
28、tf("原來(lái)沒(méi)有記錄,現(xiàn)在建立新表\n");</p><p><b> else</b></p><p> printf("先面在當(dāng)前的末尾增加新的信息\n");</p><p><b> while(1)</b></p><p><b>
29、{</b></p><p> printf("您將要添加一組信息,確定嗎?(y/n)");</p><p> gets(str);</p><p> if(str[0]=='n' || str[0]=='N')</p><p><b> break;</b
30、></p><p> if(numStus >= arraySize)</p><p><b> {</b></p><p> records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));</p><p> if(records==NU
31、LL)</p><p><b> {</b></p><p> printf("memory falled!");</p><p><b> exit(-1);</b></p><p><b> }</b></p><p>
32、 arraySize=arraySize+INCR_SIZE;</p><p><b> }</b></p><p> printf("請(qǐng)輸入學(xué)號(hào):");</p><p> gets(records[numStus].number);</p><p> printf("請(qǐng)輸入姓名:&
33、quot;);</p><p> gets(records[numStus].name);</p><p> printf("請(qǐng)輸入性別(0為女,1為男):");</p><p> gets(str);</p><p> if(str[0]=='0')</p><p> s
34、trcpy(records[numStus].gender,"女");</p><p><b> else</b></p><p> strcpy(records[numStus].gender,"男");</p><p><b> sum=0;</b></p>
35、<p> for(j=0;j<NUM_SUBJECT;j++)</p><p><b> {</b></p><p> printf("請(qǐng)輸入%s成績(jī):",subject[j]);</p><p> gets(str);</p><p> mark=(float)atof(s
36、tr);</p><p> records[numStus].score[j]=mark;</p><p> sum+=mark;</p><p><b> }</b></p><p> records[numStus].sum=sum;</p><p> records[numStus
37、].average=sum/NUM_SUBJECT;</p><p> records[numStus].index=getIndex(sum);</p><p> numStus++;</p><p><b> }</b></p><p> printf("現(xiàn)在一共有%d條信息\n",num
38、Stus);</p><p> savedTag=1;</p><p><b> }</b></p><p> //************找出總分為sum在第0至numStus-1個(gè)記錄中按升序排序的位置************</p><p> int getIndex(float sum)</p>
39、;<p><b> {</b></p><p><b> int i;</b></p><p> int count=0;</p><p> for(i=0;i<numStus;i++)</p><p><b> {</b></p>
40、<p> if(records[i].sum<sum)</p><p><b> {</b></p><p> records[i].index++;</p><p><b> }</b></p><p> else if(records[i].sum>sum)<
41、;/p><p><b> {</b></p><p><b> count++;</b></p><p><b> }</b></p><p><b> }</b></p><p> return count+1;</p
42、><p><b> }</b></p><p> #include "student.h"</p><p> //******************文件存儲(chǔ)操作函數(shù)*********************</p><p> int saveRecords(void)</p>&l
43、t;p><b> {</b></p><p><b> FILE *fp;</b></p><p> char fname[30];</p><p> if(numStus==0)</p><p><b> {</b></p><p>
44、 printf("沒(méi)有記錄可存!");</p><p> return -1;</p><p><b> }</b></p><p> printf("請(qǐng)輸入要存入的文件名(直接回車(chē)選擇文件stu_info):");</p><p> gets(fname);</p&
45、gt;<p> if(strlen(fname)==0)</p><p> strcpy(fname,"stu_info");</p><p> if((fp=fopen(fname,"wb"))==NULL)</p><p><b> {</b></p><p&
46、gt; printf("不能存入文件!\n");</p><p> return -1;</p><p><b> }</b></p><p> printf("\n存文件...\n");</p><p> fwrite(records,sizeof(StuInfo)*n
47、umStus,1,fp);</p><p> fclose(fp);</p><p> printf("%d條記錄已經(jīng)存入文件,請(qǐng)繼續(xù)操作。\n",numStus);</p><p> savedTag=0;</p><p><b> return 0;</b></p><
48、p><b> }</b></p><p> //************************文件讀取操作函數(shù)****************************</p><p> int loadRecords(void)</p><p><b> {</b></p><p>
49、<b> FILE *fp;</b></p><p> char fname[30];</p><p> char str[5];</p><p> if(numStus!=0 && savedTag==0)</p><p><b> {</b></p>&l
50、t;p> printf("請(qǐng)選擇您是要覆蓋現(xiàn)有記錄(y),還是要將");</p><p> printf("讀取的記錄添加到現(xiàn)有記錄之后(n)?\n");</p><p> printf("直接回車(chē)則覆蓋現(xiàn)有記錄\n");</p><p> gets(str);</p><
51、p> if(str[0]=='n'||str[0]=='N')</p><p><b> {</b></p><p> savedTag=1;</p><p><b> }</b></p><p><b> else</b><
52、;/p><p><b> {</b></p><p> if(savedTag==1)</p><p><b> {</b></p><p> printf("讀取文件將會(huì)更改原來(lái)的記錄,");</p><p> printf("是否保存原
53、來(lái)記錄?(y/n)");</p><p> gets(str);</p><p> if(str[0]!='n'&&str[0]!='N')</p><p> saveRecords();</p><p><b> }</b></p><
54、;p> numStus=0;</p><p><b> }</b></p><p><b> }</b></p><p> printf("請(qǐng)輸入要讀取的文件名(直接回車(chē)選擇文件stu_info):");</p><p> gets(fname);</p&g
55、t;<p> if(strlen(fname)==0)</p><p> strcpy(fname,"stu_info");</p><p> if((fp=fopen(fname,"rb"))==NULL)</p><p><b> {</b></p><p&g
56、t; printf("打不開(kāi)文件!請(qǐng)重新選擇\'n");</p><p> return -1;</p><p><b> }</b></p><p> printf("\n取文件...\n");</p><p> while(!feof(fp))</p&g
57、t;<p><b> {</b></p><p> if(numStus>=arraySize)</p><p><b> {</b></p><p> records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));</p&g
58、t;<p> if(records==NULL)</p><p><b> {</b></p><p> printf("memory failed!");</p><p><b> exit(-1);</b></p><p><b> }<
59、;/b></p><p> arraySize=arraySize+INCR_SIZE;</p><p><b> }</b></p><p> if(fread(&records[numStus],sizeof(StuInfo),1,fp)!=1) break;</p><p> //按照addR
60、ecord函數(shù)的方法,更新名次</p><p> records[numStus].index = getIndex(records[numStus].sum);</p><p> numStus++;</p><p><b> }</b></p><p> fclose(fp);</p><
61、p> printf("現(xiàn)在共有%d條記錄。",numStus);</p><p><b> return 0;</b></p><p><b> }</b></p><p> #include "student.h"</p><p> //**
62、****************文件存儲(chǔ)操作函數(shù)*********************</p><p> int saveRecords(void)</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> char fname[30]
63、;</p><p> if(numStus==0)</p><p><b> {</b></p><p> printf("沒(méi)有記錄可存!");</p><p> return -1;</p><p><b> }</b></p>
64、<p> printf("請(qǐng)輸入要存入的文件名(直接回車(chē)選擇文件stu_info):");</p><p> gets(fname);</p><p> if(strlen(fname)==0)</p><p> strcpy(fname,"stu_info");</p><p>
65、if((fp=fopen(fname,"wb"))==NULL)</p><p><b> {</b></p><p> printf("不能存入文件!\n");</p><p> return -1;</p><p><b> }</b></p
66、><p> printf("\n存文件...\n");</p><p> fwrite(records,sizeof(StuInfo)*numStus,1,fp);</p><p> fclose(fp);</p><p> printf("%d條記錄已經(jīng)存入文件,請(qǐng)繼續(xù)操作。\n",numStus
67、);</p><p> savedTag=0;</p><p><b> return 0;</b></p><p><b> }</b></p><p> //************************文件讀取操作函數(shù)****************************</
68、p><p> int loadRecords(void)</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> char fname[30];</p><p> char str[5];</p>&l
69、t;p> if(numStus!=0 && savedTag==0)</p><p><b> {</b></p><p> printf("請(qǐng)選擇您是要覆蓋現(xiàn)有記錄(y),還是要將");</p><p> printf("讀取的記錄添加到現(xiàn)有記錄之后(n)?\n");<
70、;/p><p> printf("直接回車(chē)則覆蓋現(xiàn)有記錄\n");</p><p> gets(str);</p><p> if(str[0]=='n'||str[0]=='N')</p><p><b> {</b></p><p>
71、savedTag=1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(savedTag==1)</p><p><b> {</b
72、></p><p> printf("讀取文件將會(huì)更改原來(lái)的記錄,");</p><p> printf("是否保存原來(lái)記錄?(y/n)");</p><p> gets(str);</p><p> if(str[0]!='n'&&str[0]!='
73、;N')</p><p> saveRecords();</p><p><b> }</b></p><p> numStus=0;</p><p><b> }</b></p><p><b> }</b></p>&
74、lt;p> printf("請(qǐng)輸入要讀取的文件名(直接回車(chē)選擇文件stu_info):");</p><p> gets(fname);</p><p> if(strlen(fname)==0)</p><p> strcpy(fname,"stu_info");</p><p> i
75、f((fp=fopen(fname,"rb"))==NULL)</p><p><b> {</b></p><p> printf("打不開(kāi)文件!請(qǐng)重新選擇\'n");</p><p> return -1;</p><p><b> }</b&g
76、t;</p><p> printf("\n取文件...\n");</p><p> while(!feof(fp))</p><p><b> {</b></p><p> if(numStus>=arraySize)</p><p><b> {&
77、lt;/b></p><p> records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));</p><p> if(records==NULL)</p><p><b> {</b></p><p> printf("memory
78、 failed!");</p><p><b> exit(-1);</b></p><p><b> }</b></p><p> arraySize=arraySize+INCR_SIZE;</p><p><b> }</b></p>&l
79、t;p> if(fread(&records[numStus],sizeof(StuInfo),1,fp)!=1) break;</p><p> //按照addRecord函數(shù)的方法,更新名次</p><p> records[numStus].index = getIndex(records[numStus].sum);</p><p>
80、numStus++;</p><p><b> }</b></p><p> fclose(fp);</p><p> printf("現(xiàn)在共有%d條記錄。",numStus);</p><p><b> return 0;</b></p><p>
81、;<b> }</b></p><p> #include "student.h"</p><p> //*********************學(xué)生信息排序函數(shù)*************************</p><p> void sortInfo(void)</p><p>&l
82、t;b> {</b></p><p> char str[5];</p><p><b> int i,j;</b></p><p> StuInfo tmps;</p><p> if(numStus==0)</p><p><b> {</b>
83、;</p><p> printf("沒(méi)有可供排序的記錄!");</p><p><b> return; </b></p><p><b> }</b></p><p> printf("請(qǐng)輸入您希望進(jìn)行排序的方式:\n");</p>
84、<p> printf("1.按學(xué)號(hào)進(jìn)行升序排序\n");</p><p> printf("2.按學(xué)號(hào)進(jìn)行降序排序\n");</p><p> printf("3.按姓名進(jìn)行升序排序\n");</p><p> printf("4.按姓名進(jìn)行降序排序\n");<
85、/p><p> printf("5.按名次進(jìn)行升序排序\n");</p><p> printf("6.按名次進(jìn)行降序排序\n");</p><p> printf("7.按錯(cuò)了,現(xiàn)在并不想進(jìn)行排序\n");</p><p> gets(str);</p><
86、p> if(str[0]<'1'||str[0]>'6') return;</p><p><b> //進(jìn)行排序</b></p><p> for(i=0;i<numStus-1;i++)</p><p><b> {</b></p><
87、p> for(j=i+1;j<numStus;j++)</p><p><b> {</b></p><p> if((str[0]=='1' && strcmp(records[i].number,records[j].number)>0) ||</p><p> (str[0]==&
88、#39;2' && strcmp(records[i].number,records[j].number)<0) ||</p><p> (str[0]=='3' && strcmp(records[i].name,records[j].name)>0) ||</p><p> (str[0]=='4'
89、 && strcmp(records[i].name,records[j].name)<0) ||</p><p> (str[0]=='5' && records[i].index>records[j].index) ||</p><p> (str[0]=='6' && records[i]
90、.index<records[j].index))</p><p><b> {</b></p><p> copyRecord(&records[i],&tmps);</p><p> copyRecord(&records[j],&records[i]);</p><p>
91、 copyRecord(&tmps,&records[j]);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("排序已經(jīng)完成\n")
92、;</p><p> savedTag=1;</p><p><b> }</b></p><p> #include "student.h"</p><p><b> //初始化</b></p><p> int numStus=0;
93、 //記錄學(xué)生數(shù)</p><p> StuInfo *records=NULL; //記錄學(xué)生信息</p><p> char savedTag=0; //信息保存標(biāo)志,1為未保存,0為已保存</p><p> int array
94、Size; //數(shù)組大小</p><p> char* subject[]={"高數(shù)","英語(yǔ)","線代","物理","電工","體育"};</p><p> //*****************主函數(shù)*****
95、*********************</p><p> int main()</p><p><b> {</b></p><p> records=(StuInfo*)malloc(sizeof(StuInfo)*INITIAL_SIZE);</p><p> if(records==NULL)</
96、p><p><b> {</b></p><p> printf("memory fall!");</p><p><b> exit(-1);</b></p><p><b> }</b></p><p> arraySize
97、=INITIAL_SIZE;</p><p> printf("\n");</p><p> printf("\t****************************\n");</p><p> printf("\t* 這是一個(gè) *\n");</p>
98、<p> printf("\t* 學(xué)生成績(jī)管理程序 *\n");</p><p> printf("\t* 可以對(duì)學(xué)生成績(jī)進(jìn)行管理 *\n");</p><p> printf("\t* 歡迎使用管理系統(tǒng) *\n");</p><p> printf(&
99、quot;\t****************************\n");</p><p> printf("\n");</p><p> handle_menu();</p><p><b> }</b></p><p> //******************菜單處理函數(shù)
100、***********************</p><p> void handle_menu(void)</p><p><b> {</b></p><p><b> for(;;){</b></p><p> switch(menu_select())</p><
101、;p><b> {</b></p><p><b> case 1:</b></p><p> addRecord();</p><p><b> break;</b></p><p><b> case 2:</b></p>
102、<p> modifyRecord();</p><p><b> break;</b></p><p><b> case 3:</b></p><p> display();</p><p><b> break;</b></p><
103、;p><b> case 4:</b></p><p> queryInfo();</p><p><b> break;</b></p><p><b> case 5:</b></p><p> removeRecord();</p><
104、p><b> break;</b></p><p><b> case 6:</b></p><p> saveRecords();</p><p><b> break;</b></p><p><b> case 7:</b></
105、p><p> loadRecords();</p><p><b> break;</b></p><p><b> case 8:</b></p><p> sortInfo();</p><p><b> break;</b></p>
106、;<p><b> case 9:</b></p><p><b> quit();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&l
107、t;/p><p> //*********************菜單選擇函數(shù)*************************</p><p> int menu_select()</p><p><b> {</b></p><p> char s[2];</p><p><b>
108、; int cn=0;</b></p><p> printf("\n");</p><p> printf("\t1.增加學(xué)生信息\n");</p><p> printf("\t2.修改學(xué)生信息\n");</p><p> printf("\t3.
109、顯示學(xué)生信息\n");</p><p> printf("\t4.查詢(xún)學(xué)生信息\n");</p><p> printf("\t5.刪除學(xué)生信息\n");</p><p> printf("\t6.保存學(xué)生信息至記錄文件\n");</p><p> printf(&
110、quot;\t7.從記錄文件讀取學(xué)生信息\n");</p><p> printf("\t8.排序?qū)W生信息\n");</p><p> printf("\t9.結(jié)束運(yùn)行\(zhòng)n");</p><p> printf("\n左邊數(shù)字對(duì)應(yīng)功能選擇,請(qǐng)選1-9:\t");</p><
111、;p><b> for(;;)</b></p><p><b> {</b></p><p><b> gets(s);</b></p><p> cn=atoi(s);</p><p> if(cn<1||cn>9) printf("\n
112、\t輸入錯(cuò)誤,重選1-9:");</p><p> else break;</p><p><b> }</b></p><p> return cn;</p><p><b> }</b></p><p> //*********************
113、*結(jié)束運(yùn)行*************************</p><p> void quit(void)</p><p><b> {</b></p><p> char str[5];</p><p> if(savedTag==1)</p><p><b> {<
114、;/b></p><p> printf("是否保存原來(lái)的記錄?(y/n)");</p><p> gets(str);</p><p> if(str[0]!='n' && str[0]!='N')</p><p> saveRecords();</p&
115、gt;<p><b> }</b></p><p> free(records);</p><p><b> exit(0);</b></p><p><b> }</b></p><p><b> 1.總體設(shè)計(jì):</b></
116、p><p> 本設(shè)計(jì)有4個(gè)C文件(14個(gè)函數(shù))和一個(gè)頭文件組成,每個(gè)C文件都代表著某種特定功能,他們的關(guān)系如表12-1</p><p><b> 所示。</b></p><p> 程序包含頭文件的存、取過(guò)程,其功能就是按輸入順序建立記錄。如果原來(lái)沒(méi)有記錄文件,可以重新建立一個(gè)文件;</p><p> 如果已經(jīng)有記錄,
117、可以先把文件內(nèi)容讀入,然后把新記錄追加到原來(lái)記錄的尾部;也可以單獨(dú)建立新文件,以后再使用</p><p> 讀取文件的方法拼裝。</p><p> 表12—1 文件及函數(shù)組成</p><p> 由上述功能分析可以看到改程序的全貌。因?yàn)樗胁⒘羞x擇,所</p><p> 可以用選擇菜單方便地實(shí)現(xiàn)。這個(gè)菜單具有8項(xiàng),用switch語(yǔ)句可&
118、lt;/p><p> 以實(shí)現(xiàn)這些選擇。所以用簡(jiǎn)潔的偽碼對(duì)它們進(jìn)行選擇,因?yàn)椴⒉粡?fù)雜,所以這里不自在贅述。</p><p><b> 2.函數(shù)具體設(shè)計(jì)</b></p><p> 為一些函數(shù)設(shè)計(jì)兩個(gè)返回值以區(qū)分其執(zhí)行結(jié)果是否正確。每個(gè)學(xué)生信息資料用一個(gè)StnInfo結(jié)構(gòu)來(lái)保存,用StuInfo數(shù)組的全局變量records來(lái)保存一批學(xué)生的信息資料。
119、宏定義INTIAL_SIZE表示數(shù)組初始大小,當(dāng)已分配的數(shù)組大小不夠用時(shí),敬愛(ài)那個(gè)增加數(shù)組大小,INCR_SIZE為每次增加的大小。全局變量numStus 表示數(shù)組中記錄的學(xué)生數(shù),arraySize是為數(shù)組分配的空間大小。全局變量savedTag是信息是否保存的標(biāo)志,當(dāng)數(shù)組內(nèi)容被保存只文件后,設(shè)為‘’以保存‘’狀態(tài),當(dāng)數(shù)組內(nèi)容被修改之后,設(shè)為“未保存”狀態(tài)。</p><p><b> .文件存儲(chǔ)操作函
120、數(shù)</b></p><p> 函數(shù)原型:int savedRecord(void)</p><p> 功 能:將及錄存入默認(rèn)文件 stu_info 或者指定文件。</p><p> 參 數(shù):void。</p><p> 返 回 值:成功0,失敗-1。</p><p> 工作方式:數(shù)組r
121、ecords被保存至指定文件。</p><p> 要 求:報(bào)告是否有記錄可保存、是否能正常建立或打開(kāi)文件、根據(jù)要求執(zhí)行存入操作并報(bào)告存入記錄的條數(shù)。</p><p><b> .文件讀取操作函數(shù)</b></p><p> 函數(shù)原型:int loadRecords(void)</p><p> 功 能:
122、將默認(rèn)文件stu_info 或者指定文件里的記錄存入內(nèi)存。</p><p> 參 數(shù):void。</p><p> 返 回 值:成功0,失敗-1。</p><p> 工作方式:records 為從指定文件中讀取出記錄。</p><p> 要 求:報(bào)告是否有記錄可存、是否能正常打開(kāi)文件、是否覆蓋已有記錄以及讀取記錄的條數(shù)。&
123、lt;/p><p> .顯示所有學(xué)生信息函數(shù)</p><p> 函數(shù)原型:void display(void)</p><p> 功 能:顯示內(nèi)存里的記錄信息。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p> 工作方式:從頭文
124、件開(kāi)始逐個(gè)顯示記錄內(nèi)容。</p><p> 要 求:報(bào)告是否有記錄及記錄條數(shù)和內(nèi)容。</p><p><b> .增加信息函數(shù)</b></p><p> 函數(shù)原型:void addRecord(void)</p><p> 功 能:增加記錄。</p><p> 參 數(shù):
125、void。</p><p> 返 回 值:void。</p><p> 工作方式:從尾部開(kāi)始逐個(gè)追加記錄。</p><p> 要 求:將新記錄追加在記錄尾部,并對(duì)記錄進(jìn)行計(jì)數(shù)。</p><p><b> .輸出表頭函數(shù)</b></p><p> 函數(shù)原型:void showTabl
126、e(void)</p><p> 功 能:輸出表頭信息。</p><p> 改表頭里面含有學(xué)生學(xué)號(hào),姓名,性別,及各學(xué)科名稱(chēng),總分,平均分,這樣以后每一次要輸出學(xué)生信息是直接就可以用此函數(shù),減少程序的代碼,是程序簡(jiǎn)單化。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p>
127、<p> 工作方式:輸出頭一行表頭信息。</p><p> 要 求:輸出一行表頭信息。</p><p><b> .刪除記錄函數(shù)</b></p><p> 函數(shù)原型:void removerecord(void)</p><p> 功 能:刪除內(nèi)存數(shù)組中指定記錄。</p>&
128、lt;p> 如果有的學(xué)生信息發(fā)生改變,你可以丟它進(jìn)行刪除,刪除之前,你必須找到你要修改學(xué)生的記錄,你可以根據(jù)姓名,學(xué)號(hào)超找改學(xué)生的信息,找到之后,若要?jiǎng)h除,就對(duì)它進(jìn)行刪除。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p> 工作方式:根據(jù)給定的關(guān)鍵字,查找符合的記錄并刪除之。</p>
129、<p> 要 求:將后面的記錄前移,同時(shí)改變名次并給出相關(guān)信息。</p><p><b> .查找指定記錄函數(shù)</b></p><p> 函數(shù)原型:void findRecord(char*,int,int)</p><p> 功 能:查找指定記錄。</p><p> 參 數(shù):cha
130、r *target:欲查找記錄的某一項(xiàng)與target相同。</p><p> int targetType:表明通過(guò)哪一項(xiàng)來(lái)查找,0為學(xué)號(hào),</p><p> 1為姓名,2為名次。</p><p> int from:從第from個(gè)記錄開(kāi)始找。</p><p> 返 回 值:int(找到的記錄序號(hào)),若找不到則返回-1。</p&
131、gt;<p> 工作方式:根據(jù)給定的關(guān)鍵字,查找符合記錄的序號(hào)。</p><p> 要 求:找不到則返回-1。</p><p> .查找指定學(xué)生信息函數(shù)</p><p> 函數(shù)原型:void queryInfo(void)</p><p> 功 能:將一個(gè)文件的內(nèi)容追加到另一個(gè)文件的尾部。</p>
132、;<p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p> 工作方式:可以按照學(xué)號(hào)、姓名或名次來(lái)查詢(xún)。</p><p> 要 求:打印查詢(xún)到得學(xué)生信息或給出相關(guān)信息。</p><p><b> .記錄復(fù)制函數(shù)</b></p><p&g
133、t; 函數(shù)原型:void copyRecord(stuInfo*, stuInfo*)</p><p> 功 能:將src指向的一條記錄復(fù)制給dest指向的記錄。</p><p> 參 數(shù):StuInfo* src為源記錄StuInfo* dest為目的記錄。</p><p> 返 回 值:void。</p><p>
134、工作方式:將源記錄逐條復(fù)制到目的記錄。</p><p> 要 求:正確復(fù)制字符串。</p><p> .修改指定學(xué)生信息函數(shù)</p><p> 函數(shù)原型:void modifyRecord(void)</p><p> 功 能:找到指定記錄并修改。如果有的學(xué)生信息發(fā)生改變,你可以丟它進(jìn)行修改,修改之前,你必須找到你要修改學(xué)
135、生的記錄,你可以根據(jù)姓名,學(xué)號(hào)超找改學(xué)生的信息,找到之后,若要修改,就對(duì)它進(jìn)行修改。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p> 工作方式:可以按照學(xué)號(hào)、姓名活名次找到要修改的記錄,確認(rèn)后方可修改。</p><p> 要 求:同時(shí)需要調(diào)整名次。</p>&
136、lt;p><b> .菜單處理函數(shù)函數(shù)</b></p><p> 函數(shù)原型:void handle_menu(void)</p><p> 功 能:處理選擇的菜單命令。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p>
137、工作方式:根據(jù)命令,調(diào)用相應(yīng)函數(shù)。</p><p> 要 求:給出結(jié)束信息。</p><p><b> .菜單選擇函數(shù)</b></p><p> 函數(shù)原型:void menu_select(void)</p><p> 功 能:接受用戶選擇代碼。</p><p> 參
138、數(shù):void。</p><p> 返 回 值:int。</p><p> 工作方式:返回命令代碼整數(shù)值。</p><p> 要 求:只允許選擇規(guī)定鍵,若果輸入不符合要求,則提醒用戶重新輸入。</p><p><b> .結(jié)束程序運(yùn)行函數(shù)</b></p><p> 函數(shù)原型:void
139、 quit(ADDR*)</p><p> 功 能:結(jié)束程序運(yùn)行。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p> 工作方式:根據(jù)要求決定在退出前是否將修改的記錄存入文件。</p><p> 要 求:結(jié)束運(yùn)行之前,詢(xún)問(wèn)是否丟修改的記錄進(jìn)行存儲(chǔ)
140、。</p><p><b> 排序函數(shù)</b></p><p> 函數(shù)原型:sortInfo(void)</p><p> 功 能:對(duì)學(xué)生的總進(jìn)行排序,可以按照升序,降序,對(duì)學(xué)生成績(jī)或?qū)W號(hào)進(jìn)行準(zhǔn)確的排名。</p><p> 參 數(shù):void。</p><p> 返 回 值:v
141、oid。</p><p> 工作方式:對(duì)學(xué)生進(jìn)行排序,可以根據(jù)需要,對(duì)學(xué)生的學(xué)號(hào)或者成績(jī)進(jìn)行升序或者降序。你通過(guò)選擇1—7中的選項(xiàng)來(lái)滿足你的需求。</p><p> 要 求:升序或者降序。</p><p><b> .主函數(shù)</b></p><p> 函數(shù)原型:void main(void)</p&g
142、t;<p> 功 能:控制程序。</p><p> 參 數(shù):void。</p><p> 返 回 值:void。</p><p> 要 求:管理菜單命令并完成初始化。</p><p><b> .頭文件</b></p><p> 文件名稱(chēng):student
143、.h</p><p> 功 能:聲明函數(shù)原型,包含文件及自定義宏和數(shù)據(jù)結(jié)構(gòu)。</p><p> 要 求:報(bào)告是否能正常打開(kāi)文件執(zhí)行存入操作及存入記錄條數(shù)。</p><p> #ifndef H_STUDENT_HH</p><p> #define H_STUDENT_HH</p><p> 用來(lái)
144、防止重復(fù)包含的。這種比較怪異方式,不如STUDENT_H那樣清晰明了,目的是盡量避免可能出現(xiàn)的重復(fù)的宏定義。</p><p> 在頭文件是,對(duì)于系統(tǒng)庫(kù)投文件,使用“<>”形勢(shì),表示從系統(tǒng)查找頭文件;對(duì)于自己建立的頭文件,如student.h,使用 #include“student”的形勢(shì),表示處理系統(tǒng)庫(kù)目錄外,還要從目錄去查找頭文件。</p><p> 這14個(gè)函
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語(yǔ)言程序設(shè)計(jì)-學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言程序設(shè)計(jì)__學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)程序設(shè)計(jì)
- c語(yǔ)言程序課程設(shè)計(jì)----學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)-c語(yǔ)言計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告
- c++程序設(shè)計(jì)課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- c++程序設(shè)計(jì)課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言程序課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)
- c語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告
- c++程序設(shè)計(jì)課程設(shè)計(jì) ----學(xué)生成績(jī)管理系統(tǒng)實(shí)驗(yàn)報(bào)告
- vb程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告-學(xué)生成績(jī)管理系統(tǒng)
- vb程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)
- vb程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告-學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告---學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告--學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告----學(xué)生成績(jī)管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告--學(xué)生成績(jī)管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論