版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 程序設(shè)計(jì)實(shí)訓(xùn)</b></p><p><b> 說(shuō) 明 書(shū)</b></p><p> 2015 年 1月 10 日</p><p><b> 選題要求</b></p><p> 假定有n門(mén)課程,每門(mén)課程有:課程編號(hào),課程名稱,課程性質(zhì)(公共
2、課、必修課、選修課),總學(xué)時(shí),授課學(xué)時(shí),實(shí)驗(yàn)或上機(jī)學(xué)時(shí),學(xué)分,開(kāi)課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。試設(shè)計(jì)一選修課程系統(tǒng),使之能提供以下功能:</p><p> (1)系統(tǒng)以菜單方式工作</p><p> ?。?)課程信息錄入功能(課程信息用文件保存) </p><p> (3)課程信息瀏覽功能</p><p>
3、 (4)課程信息查詢功能,查詢方式分兩種: 按學(xué)分查詢, 按課程性質(zhì)查詢</p><p> ?。?)學(xué)生選修課程:提示選課成功,按照學(xué)生學(xué)號(hào)查詢?cè)撋x課程</p><p><b> 考試增加的功能</b></p><p> 按照學(xué)期進(jìn)行查詢課程信息</p><p> 判斷課程性質(zhì)為公共課的課程
4、信息顯示并存入文件里</p><p> 注:程序共生成三個(gè)文件(選修課程信息文件,公共課文件,學(xué)生選課文件)</p><p> 程序設(shè)計(jì)方法及主要函數(shù)介紹</p><p> 1.由于C語(yǔ)言是面向過(guò)程的語(yǔ)言,所以我的設(shè)計(jì)思路是根據(jù)目標(biāo)程序運(yùn)行的過(guò)程來(lái)編寫(xiě)的。</p><p> 我具體的設(shè)計(jì)思路如下:</p><p&g
5、t; 我設(shè)計(jì)的是學(xué)生選修課管理系統(tǒng),對(duì)選修課程能夠進(jìn)行錄入,查詢和瀏覽操作等,并且要求有菜單界面和退出功能。</p><p> 首先,我考慮到程序的數(shù)據(jù)優(yōu)先輸入,可以先設(shè)置一個(gè)選修課登陸界面,然后在該菜單里可進(jìn)行選修課的錄入,查詢和瀏覽操作,最后將錄入的課程保存到相應(yīng)的文件中。然后定義各種函數(shù)的功能包括查詢(按學(xué)期查找,按學(xué)分查找,按課程性質(zhì)查找)操作等。 </p><p> 另
6、一個(gè)為學(xué)生登陸界面,該菜單學(xué)生可以進(jìn)行課程瀏覽,課程選擇,查詢所選課程等操作,最后將學(xué)生所選的課程信息存入文件(有學(xué)號(hào),課程編號(hào)及名稱)中。在進(jìn)行該操作之前需要對(duì)選修課程保存的文件進(jìn)行讀取,然后對(duì)其中的內(nèi)容進(jìn)行查詢等,在學(xué)生選好課程以后,可以將其選好的課程保存于相應(yīng)的文件中,以便下次進(jìn)行查詢及修改。</p><p> 通過(guò)函數(shù)的層層調(diào)用來(lái)實(shí)現(xiàn)程序的邏輯結(jié)構(gòu)。中間通過(guò)文件的打開(kāi)和關(guān)閉實(shí)現(xiàn)對(duì)文件內(nèi)部所包含的數(shù)據(jù)的操
7、作。</p><p><b> 函數(shù)介紹如下:</b></p><p> int main()//主函數(shù)</p><p> void Mangers()//選修課函數(shù)</p><p> void *insert()//插入課程信息函數(shù)</p><p> void savefile()//
8、保存文件</p><p> void prin() //瀏覽所有課程函數(shù)</p><p> void search()//課程信息查詢函數(shù)</p><p> void GonggkInfor()//查詢公共課信息函數(shù)</p><p> void Students()//學(xué)生信息函數(shù)</p><p> void
9、 prin() //瀏覽所有課程函數(shù)</p><p> void xuan_ke()//學(xué)生選課函數(shù)</p><p> void xuanke_information()//學(xué)生選課信息統(tǒng)計(jì)函數(shù)</p><p> 三、程序源代碼(包括注釋)</p><p> #include<string.h> //字符串處理函數(shù)
10、 </p><p> #include<stdio.h> //輸入,輸出函數(shù)</p><p> #include<malloc.h> //動(dòng)態(tài)存儲(chǔ)分配函數(shù)</p><p> #include<stdlib.h> //動(dòng)態(tài)內(nèi)存分配函數(shù)</p><p> #include<
11、;conio.h> </p><p> typedef struct subjects{//定義一個(gè)課程的結(jié)構(gòu)體 </p><p> int num; //課程編號(hào)</p><p> char name[20]; //課程名稱</p><p> char kind[1
12、0]; //課程性質(zhì)</p><p> int stime; //總學(xué)時(shí)</p><p> int ttime; //授課學(xué)時(shí)</p><p> int etime; //實(shí)驗(yàn)或上機(jī)學(xué)時(shí)</p><p> int score;
13、 //學(xué)分</p><p> char term[20]; //開(kāi)課學(xué)期 </p><p> struct subjects *next; //next是指針變量,指向結(jié)構(gòu)體變量 </p><p> }SUB;//定義一個(gè)SUB的結(jié)構(gòu)體</p><p> SUB *head=NULL; //鏈表
14、的頭指針置空 </p><p> SUB *create_form() //創(chuàng)建鏈表 </p><p><b> {</b></p><p> SUB *head,*tail,*p; //創(chuàng)建鏈表的頭指針,尾指針 </p><p> int num,stime,ttime; </p><p&g
15、t; int etime,score; </p><p> char name[20],kind[10],term[20]; </p><p> int size=sizeof(SUB);//給結(jié)構(gòu)體SUB申請(qǐng)空間 </p><p> head=tail=NULL; //先讓頭指針和為指針置空 </p><p> printf(&q
16、uot;輸入選修課程信息:\n"); </p><p> scanf("%d%s%s%d%d%d%d%s",&num,name,kind,&stime,&ttime,&etime,&score,&term); </p><p> while(num!=0){ </p><p> p=
17、(SUB *)malloc(sizeof(SUB));//給結(jié)點(diǎn)p申請(qǐng)內(nèi)存 </p><p> p->num=num;//給元素num賦值 </p><p> strcpy(p->name,name); //給元素name賦值</p><p> strcpy(p->kind,kind);//給元素kind賦值 </p><
18、;p> p->stime=stime; //給元素stime賦值</p><p> p->ttime=ttime; //給元素ttime賦值</p><p> p->etime=etime; //給元素etime賦值</p><p> p->score=score; //給元素score賦值</p><p&g
19、t; strcpy(p->term,term); //給元素term賦值</p><p> if(head==NULL) </p><p> head=p;//若頭指針為空,把結(jié)點(diǎn)p賦值給頭指針 </p><p><b> else </b></p><p> tail->next=p;//否則把p
20、賦值給尾指針指向下一個(gè)結(jié)點(diǎn) </p><p> tail=p; scanf("%d%s%s%d%d%d%%s",&num,name,kind,&stime,&ttime,&etime,&score,term);</p><p><b> } </b></p><p> ta
21、il->next=NULL;//尾結(jié)點(diǎn)的數(shù)據(jù)域?yàn)榭?</p><p> return head; </p><p><b> } </b></p><p> void savefile()//保存文件</p><p><b> { </b></p><p>
22、SUB *p; //申明一個(gè)SUB型的指針變量p </p><p> FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量 </p><p> fp=fopen("ZSL1314010731.txt","w");//打開(kāi)文件 </p><p> if(fp==NULL) </p>&l
23、t;p><b> { </b></p><p> printf("\nCannot open the file!\n");//打開(kāi)文件失敗 </p><p><b> } </b></p><p> fprintf(fp,"課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí)
24、 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n"); //在文本的第一行輸入該信息 </p><p> for(p=head;p;p=p->next) </p><p> fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%11s\n",p->num,p->name,p->kind,p->stime,p->
25、ttime,p->etime,p->score,p->term); //在文件里寫(xiě)入信息 </p><p> fclose(fp); //關(guān)閉文件 </p><p> printf("創(chuàng)建后的信息已放入'ZSL1314010731.txt'文件中\(zhòng)n"); </p><p> system("pa
26、use"); </p><p><b> } </b></p><p> void savefile1()//保存文件</p><p><b> {</b></p><p> SUB *p; //申明一個(gè)SUB型的指針變量p </p><p> FILE
27、*fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p> fp=fopen("3.txt","w"); </p><p> if(fp==NULL) exit(0); </p><p> fprintf(fp,"課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)
28、課學(xué)期\n"); //在文本的第一行輸入該信息</p><p> for(p=head;p;p=p->next) </p><p> fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%11s\n",p->num,p->name,p->kind,p->stime,p->ttime,p->eti
29、me,p->score,p->term); //在文本里寫(xiě)入信息 </p><p> fclose(fp); //關(guān)閉文件</p><p> printf("創(chuàng)建后的信息已放入'3.txt'文件中\(zhòng)n"); </p><p> system("pause"); </p><
30、;p><b> } </b></p><p> void readfile()//閱讀文件</p><p><b> { </b></p><p> void *myInsert(SUB*);//申明該函數(shù) </p><p> SUB *newSub;//申明一個(gè)SUB型的指針變量
31、newSub</p><p> int num,stime,ttime,etime; </p><p> int score; </p><p> char c,name[20],kind[10],fname[20],term;</p><p> printf("請(qǐng)輸入課程信息所在的文件名稱:"); </p&
32、gt;<p> scanf("%s",fname); </p><p> FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p> fp=fopen(fname,"r"); //打開(kāi)文件</p><p> while(!feof(fp)) { //判斷文件是否到了結(jié)尾 </p>
33、;<p> if((c=fgetc(fp))=='\n') break; </p><p><b> } </b></p><p> while(!feof(fp)) { </p><p> newSub=(SUB*)malloc(sizeof(SUB));//給結(jié)點(diǎn)p申請(qǐng)內(nèi)存 </p>&l
34、t;p> fscanf(fp,"%d%s%s%d%d%d%d%s\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term); //在文本里寫(xiě)
35、入信息 </p><p> myInsert(newSub);//調(diào)用該函數(shù) </p><p><b> } </b></p><p> fclose(fp);//關(guān)閉文件 </p><p><b> } </b></p><p> void prin() //瀏覽
36、所有課程函數(shù) </p><p><b> { </b></p><p> readfile();//申明該函數(shù)</p><p> SUB *ptr;//申明一個(gè)SUB型的指針變量ptr </p><p> head=NULL; </p><p> if(head==NULL) { &l
37、t;/p><p> printf("\n\n\t*********NO RECORDS!************\n"); </p><p><b> return; </b></p><p><b> } </b></p><p> printf("課程編號(hào) 課
38、程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n"); </p><p> for(ptr=head;ptr;ptr=ptr->next) { </p><p> printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->
39、kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); </p><p><b> } </b></p><p> system("pause"); </p><p><b> } </b></p
40、><p> void *myInsert(SUB* subj)//鏈表插入操作</p><p><b> { </b></p><p> SUB *ptr,*ptr2; //申明一個(gè)SUB型的指針變量ptr,ptr2</p><p> ptr=subj; </p><p> if(head=
41、=NULL)</p><p><b> { </b></p><p> head=ptr; </p><p> head->next=NULL; </p><p><b> } </b></p><p><b> else { </b>&
42、lt;/p><p> for(ptr2=head;ptr2;ptr2=ptr2->next) </p><p> if(ptr2->next==NULL)</p><p><b> { </b></p><p> ptr2->next=subj;//連接結(jié)點(diǎn) </p><p>
43、; subj->next=NULL;//下一個(gè)結(jié)點(diǎn)為空 </p><p><b> break; </b></p><p><b> } </b></p><p><b> } </b></p><p> return 0; </p><p&
44、gt;<b> } </b></p><p> void *insert()//插入課程信息函數(shù) </p><p><b> { </b></p><p> int size=sizeof(SUB);//申明并給分配內(nèi)存 </p><p> char ch,ch1;</p>
45、<p> SUB *ptr,*subj;//申明一個(gè)SUB型的指針變量ptr,subj </p><p> while(ch!='0')</p><p><b> { </b></p><p> subj=(SUB *)malloc(size);//分配內(nèi)存 </p><p> ptr
46、=subj; </p><p> printf("輸入要插入的課程信息:\n"); //以下為元素輸入信息 </p><p> printf("\n\t\t請(qǐng)輸入課程編號(hào):");scanf("%d",&subj->num); </p><p> printf("\n\t\
47、t請(qǐng)輸入課程名稱:");scanf("%s",&subj->name); </p><p> printf("\n\t\t請(qǐng)輸入課程性質(zhì):");scanf("%s",&subj->kind); </p><p> printf("\n\t\t請(qǐng)輸入總學(xué)時(shí):");
48、scanf("%d",&subj->stime); </p><p> printf("\n\t\t請(qǐng)輸入授課學(xué)時(shí):");scanf("%d",&subj->ttime); </p><p> printf("\n\t\t請(qǐng)輸入實(shí)踐或上機(jī)學(xué)時(shí):");scanf("%d&
49、quot;,&subj->etime); </p><p> printf("\n\t\t請(qǐng)輸入學(xué)分:");scanf("%d",&subj->score); </p><p> printf("\n\t\t請(qǐng)輸入開(kāi)課學(xué)期:");scanf("%s",&subj->
50、term); </p><p> myInsert(subj); //調(diào)用該函數(shù)目的是是否繼續(xù)接受下一個(gè)結(jié)點(diǎn) </p><p> printf("\n添加完畢,新信息存入文件中\(zhòng)n"); </p><p> printf("\n繼續(xù)插入請(qǐng)按回車\n"); </p><p> printf(&qu
51、ot;\n結(jié)束添加課程按0: [ ]\b\b"); </p><p> ch1=getchar(); //將回車鍵賦給CH1,否則subj->term輸完后輸入的回車鍵會(huì)賦給CH,因此用CH1填補(bǔ)。</p><p> ch=getchar(); </p><p><b> } </b></p><p
52、> return head; </p><p><b> }</b></p><p> void *del() //刪除課程函數(shù) </p><p><b> { </b></p><p> SUB *p1,*p2;//申明一個(gè)SUB型的指針變量p1,p2 </p>&l
53、t;p> char ch,ch1; </p><p><b> int num; </b></p><p> while(ch!='0') { </p><p> printf("輸入想要?jiǎng)h除的課程編號(hào):[ ]\b\b\b\b\b"); </p><p> sca
54、nf("%d",&num); </p><p> if(head->num==num) { </p><p> p2=head; //以下為刪除結(jié)點(diǎn)操作 </p><p> head=head->next; </p><p> free(p2); </p><p><
55、;b> } </b></p><p> if(head==NULL) return NULL; </p><p><b> p1=head; </b></p><p> p2=head->next; </p><p> while(p2){</p><p>
56、if(p2->num==num){ </p><p> p1->next=p2->next; </p><p><b> free(p2);</b></p><p><b> } </b></p><p> else p1=p2; </p><p>
57、; p2=p1->next; </p><p><b> } </b></p><p> printf("\n繼續(xù)刪除請(qǐng)按回車\n"); </p><p> printf("\n結(jié)束刪除課程按 0: [ ]\b\b"); </p><p> ch1=getchar(
58、);//將回車鍵賦給CH1,否則num輸完后再輸入的回車鍵會(huì)賦給CH,因此用CH1填補(bǔ)。</p><p> ch=getchar(); </p><p> printf("\n刪除完畢,新信息存入文件中\(zhòng)n"); </p><p> system("pause"); </p><p><b
59、> } </b></p><p> return head; </p><p> system("pause"); </p><p><b> }</b></p><p> void GonggkInfor()//查詢公共課信息函數(shù) </p><p>
60、;<b> { </b></p><p><b> int t=1;</b></p><p> char min[20];</p><p> SUB *ptr;//申明一個(gè)SUB型的指針變量ptr</p><p> FILE *fp;//fp是指向FILE結(jié)構(gòu)的指針變量 &l
61、t;/p><p> fp=fopen("GonggkInfor.txt","w");//打開(kāi)文件 </p><p> printf("請(qǐng)輸入要查找的課程性質(zhì):"); </p><p> scanf("%s",min);</p><p> printf(&q
62、uot;課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n"); </p><p> for(ptr=head;ptr;ptr=ptr->next) </p><p><b> {</b></p><p> if(strcmp(min,ptr->kind)==0)//通過(guò)
63、比較兩個(gè)字符串來(lái)進(jìn)行實(shí)現(xiàn) </p><p><b> { </b></p><p> printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->sc
64、ore,ptr->term); </p><p><b> t=0; </b></p><p><b> }</b></p><p><b> t=1; </b></p><p> } </p><p> if(fp==
65、NULL) </p><p><b> {</b></p><p> printf("文件存取失敗!");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> fpr
66、intf(fp,"課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n");//在文本的第一行輸入該信息 </p><p> for(ptr=head;ptr;ptr=ptr->next) </p><p> if(strcmp(min,ptr->kind)==0)</p><p>&l
67、t;b> { </b></p><p> fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);//在文本里寫(xiě)入信息 <
68、;/p><p><b> t=0; </b></p><p><b> }</b></p><p><b> t=1; </b></p><p> fclose(fp);//關(guān)閉文件 </p><p> printf("已把性
69、質(zhì)為公共課的信息存入文件‘GonggkInfor.txt’里!");</p><p> system("pause"); </p><p><b> }</b></p><p> void search()//課程信息查詢函數(shù) </p><p><b> { <
70、;/b></p><p> int a,num; </p><p><b> int t=1; </b></p><p> char type[10],min[10],term[10];</p><p> SUB *ptr; //申明一個(gè)SUB型的指針變量ptr </p><p>
71、 L1:system("cls");//清屏功能,每次操作完返回到該功能首菜單 </p><p> printf("\n\n\t\t**********請(qǐng)選擇查詢方式*************\n"); </p><p> printf("\n\t\t\t1---按學(xué)期查找\n");</p><p>
72、 printf("\n\t\t\t2---按課程性質(zhì)查找\n"); </p><p> printf("\n\t\t\t3---按學(xué)分查找\n"); </p><p> printf("\n\t\t\t4---退出查找\n"); </p><p> printf("\n\n\t\t*****
73、*********************************\n"); </p><p> printf("\n\n請(qǐng)選擇(1-4):[ ]\b\b"); </p><p> scanf("%d",&a); </p><p> switch(a) { </p><p>
74、case 1:printf("請(qǐng)輸入要查找的課程學(xué)期:"); </p><p> scanf("%s",min); </p><p> printf("課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n"); </p><p> for(ptr=head;
75、ptr;ptr=ptr->next) </p><p><b> {</b></p><p> if(strcmp(min,ptr->term)==0)//通過(guò)比較兩個(gè)字符串來(lái)進(jìn)行實(shí)現(xiàn) </p><p><b> { </b></p><p> printf("%5d%
76、12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); </p><p><b> t=0; </b></p><p><b>
77、 }t=1; </b></p><p> } </p><p> system("pause"); </p><p> goto L1;//再次返回到該菜單進(jìn)行下一個(gè)操作 </p><p> case 2:printf("請(qǐng)輸入要查找的課程的性質(zhì):");
78、</p><p> scanf("%s",type); </p><p> printf("課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n"); </p><p> for(ptr=head;ptr;ptr=ptr->next)</p><p&g
79、t;<b> { </b></p><p> if(strcmp(type,ptr->kind)==0)</p><p><b> { </b></p><p> printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->nam
80、e,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); </p><p><b> t=0; </b></p><p><b> }t=1; </b></p><p><b> }<
81、/b></p><p> system("pause"); </p><p><b> goto L1; </b></p><p> case 3:printf("輸入要查找的課程的學(xué)分:"); </p><p> scanf("%d&q
82、uot;,&num); </p><p> printf("課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開(kāi)課學(xué)期\n");</p><p> for(ptr=head;ptr;ptr=ptr->next) </p><p><b> {</b></p>
83、<p> if(ptr->score==num)</p><p><b> { </b></p><p> printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr-
84、>etime,ptr->score,ptr->term); </p><p><b> t=1; </b></p><p><b> } </b></p><p> system("pause"); </p><p><b> goto L1;
85、</b></p><p> case 4:break;</p><p><b> } </b></p><p><b> } </b></p><p> void Mangers()//選修課函數(shù) </p><p><b> { </b&
86、gt;</p><p> int n,w=1,flag=0,j,i=3; </p><p><b> do{ </b></p><p> system("cls"); //選修課信息菜單 </p><p> printf("\n\n\t\t*********************選
87、修課菜單***********************\n\n"); </p><p> printf("\t\t\t\t 1---錄入課程\n");</p><p> printf("\t\t\t\t 2---瀏覽課程\n"); </p><p> printf("\t\t\t\t
88、 3---查詢課程\n"); </p><p> printf("\t\t\t\t 4---存取公共課課程\n"); </p><p> printf("\t\t\t\t 5---返回主菜單"); </p><p> printf("\n\n\t\t********************
89、**********************************\n"); </p><p> printf("請(qǐng)選擇(1-5):[ ]\b\b"); </p><p> scanf("%d",&n); </p><p><b> switch(n)</b></p>
90、<p><b> { </b></p><p> case 1:insert();savefile();break;</p><p> case 2:prin();break;</p><p> case 3:search();break;</p><p> case 4:GonggkInfor(
91、);break; </p><p> case 5:return; </p><p> default:; </p><p><b> }</b></p><p> } while(w==1); </p><p><b> } </b></p><
92、;p> struct student </p><p><b> { </b></p><p> long int snum;//學(xué)生學(xué)號(hào) </p><p> int cnum;//所選課程編號(hào) </p><p> char cname[20];//所選課程名稱 </p><p>
93、 };//定義一個(gè)學(xué)生結(jié)構(gòu)體 </p><p> void xuan_ke()//學(xué)生選課函數(shù) </p><p><b> { </b></p><p> struct student s;//定義學(xué)生結(jié)構(gòu)體變量s </p><p><b> char C; </b></p>
94、<p> SUB *c;//定義課程結(jié)構(gòu)體變量c</p><p> FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p> printf("\n 請(qǐng)輸入您的學(xué)號(hào)及您要選擇的課程編號(hào):"); </p><p> scanf("%d %d",&s.snum,&s.cnum)
95、;</p><p> fp=fopen("ZSL1314010731.txt","r");</p><p> if(fp==NULL) //打開(kāi)選課記錄文件"2.txt" </p><p> { printf("\nCannot open course!\n"); }
96、</p><p> while(!feof(fp)) </p><p> { if((C=fgetc(fp))=='\n') break; } </p><p> while(!feof(fp))</p><p><b> { </b></p><p> c=(
97、SUB*)malloc(sizeof(SUB));//給結(jié)點(diǎn)申請(qǐng)空間 </p><p> fscanf(fp,"%d %s %s %d %d %d %d %s\n",&c->num,c->name,c->kind,&c->stime,&c->ttime,&c->etime,&c->score,&c-&g
98、t;term); </p><p> if(c->num==s.cnum) //通過(guò)學(xué)生選課輸入的編號(hào),和選修課程中的編號(hào)進(jìn)行匹配,若匹配成功就結(jié)束,并帶回當(dāng)前指針 </p><p><b> break;</b></p><p><b> } </b></p><p> fclose
99、(fp);//關(guān)閉選課記錄文件"ZSL1314010731.txt"</p><p> if((fp=fopen("student.txt","a+"))==NULL)</p><p> { printf("\nCannot open student!\n");} </p><p&g
100、t; //將學(xué)生選課信息輸入student.txt文件</p><p> fprintf(fp,"%d %d %s\n",s.snum,s.cnum,c->name);//把選課學(xué)生的學(xué)號(hào),所選課程編號(hào),課程名稱寫(xiě)入文件里 </p><p> fclose(fp);</p><p> printf("\n 恭喜您選課成功!
101、信息已存入到“student.txt”中。\n"); </p><p> system("pause");</p><p><b> } </b></p><p> void xuanke_information()//學(xué)生選課信息統(tǒng)計(jì)函數(shù) </p><p><b> {
102、 </b></p><p> int total=0;//人數(shù)統(tǒng)計(jì)變量</p><p> FILE *fp;//fp是指向FILE結(jié)構(gòu)的指針變量</p><p> struct student s;//定義一個(gè)student結(jié)構(gòu)體類型的變量s </p><p> if((fp=fopen("student.txt
103、","r"))==NULL)//打開(kāi)選課記錄文件"student.txt"</p><p> { printf("\nCannot open student!\n"); } </p><p> for(;!feof(fp);) </p><p><b> { </b>
104、;</p><p> printf("\n\t\t 學(xué)號(hào) 課程編號(hào) 課程名稱\n"); </p><p> fscanf(fp,"%d %d %s\n",&s.snum,&s.cnum,&s.cname); </p><p><b> total
105、++; </b></p><p> printf("%22d %17d %18s\n",s.snum,s.cnum,s.cname); </p><p><b> }</b></p><p> printf("\n 選課學(xué)生總?cè)藬?shù)為:%d人",total)
106、;</p><p> fclose(fp);//關(guān)閉文件 </p><p> system("pause");</p><p><b> } </b></p><p> void Students()//學(xué)生信息函數(shù) </p><p><b> { &l
107、t;/b></p><p> int n,w=1; </p><p><b> do { </b></p><p> system("cls"); </p><p> printf("\n\n\t\t*********************學(xué)生選課菜單************
108、******\n\n"); </p><p> printf("\t\t\t\t1---瀏覽所有課程\n"); </p><p> printf("\t\t\t\t2---選擇選修課程\n"); </p><p> printf("\t\t\t\t3---瀏覽我選修的課程\n"); <
109、;/p><p> printf("\t\t\t\t4---返回主菜單"); </p><p> printf("\n\n\t\t****************************************************\n"); </p><p> printf("請(qǐng)選擇(1-4):[ ]\b\b&q
110、uot;); </p><p> scanf("%d",&n); </p><p> switch(n){ </p><p> case 1:prin();break; </p><p> case 2:xuan_ke();break; </p><p> case 3:xuan
111、ke_information();break; </p><p> case 4:return; </p><p> default:; </p><p><b> } </b></p><p> } while(w==1); </p><p><b> } </b>
112、;</p><p> int main()//主函數(shù) </p><p><b> { </b></p><p> int n,w=1; </p><p><b> do{ </b></p><p> system("cls"); </p&g
113、t;<p> printf("\n\n\t*********************學(xué)生選課系統(tǒng)*********************\n\n"); </p><p> printf("\t\t\t 1.選修課信息\n"); </p><p> printf("\t\t\t 2.學(xué)生選課\n"
114、;); </p><p> printf("\t\t\t 3.退出"); </p><p> printf("\n\n\t******************************************************\n"); </p><p> printf("請(qǐng)選擇(1-3):[ ]\
115、b\b"); </p><p> scanf("%d",&n); </p><p> switch(n){</p><p> case 1:Mangers();break; </p><p> case 2:Students();break; </p><p> case
116、 3:w=0;break; </p><p> default:; </p><p><b> } </b></p><p> } while(w==1); </p><p><b> return 0;</b></p><p><b> } </b
117、></p><p><b> 程序運(yùn)行界面</b></p><p><b> 主界面</b></p><p><b> 選修課菜單 </b></p><p> a>錄入課程(并存入到ZSL1314010731.txt)</p><p>
118、; 將所有錄入的課程存入’ZSL1314010731.txt’文件</p><p><b> b>瀏覽課程</b></p><p><b> c>查詢課程</b></p><p> 按學(xué)期查找(考試增加功能)</p><p><b> 按課程性質(zhì)查找</b>
119、;</p><p><b> 按學(xué)分查找</b></p><p> d>判斷并存取公共課課程</p><p> 將公共課的課程信息寫(xiě)入’GonggkInfor.txt’文件</p><p><b> 學(xué)生選課菜單</b></p><p><b> a
120、>學(xué)生開(kāi)始選課</b></p><p> 將學(xué)生選課信息存入’student.txt’文件</p><p> b>查詢學(xué)生所選課程</p><p><b> 返回主菜單</b></p><p><b> 生成的三個(gè)文件</b></p><p>
121、<b> 程序的優(yōu)點(diǎn)和不足</b></p><p><b> 【程序的優(yōu)點(diǎn)】</b></p><p> 算法是程序的靈魂,程序的優(yōu)點(diǎn)首先表現(xiàn)在算法上的優(yōu)點(diǎn),其次才是功能上的。</p><p> ?。鬯惴ㄉ系膬?yōu)點(diǎn)]主要體現(xiàn)在以下三點(diǎn):</p><p> 該程序采用main主函數(shù)方式設(shè)計(jì),程序的
122、主體的功能大都由該功能完成。程序如此設(shè)計(jì)有利于程序的進(jìn)一步改進(jìn)及有助于程序執(zhí)行效率的提高。</p><p> 程序?qū)ξ募?shù)據(jù)的讀寫(xiě)采用了fread和fwrite塊讀寫(xiě)函數(shù),能夠?qū)⑽募械臄?shù)據(jù)完全讀出,然后賦到定義的數(shù)組中,再在相應(yīng)的數(shù)組中進(jìn)行一系列操作,最終再寫(xiě)入文件。</p><p> 插入操作在本程序中是將課程信息插入到鏈表的最后一個(gè)節(jié)點(diǎn),從而減少了數(shù)據(jù)的相互移動(dòng),節(jié)省了時(shí)間,提高
123、了效率。</p><p> ?。酃δ苌系膬?yōu)點(diǎn)]主要體現(xiàn)在以下兩點(diǎn):</p><p> 1.有簡(jiǎn)潔明了的程序菜單。程序主要采用了層次嵌套的菜單,相互獨(dú)立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。</p><p> 有人性化的程序提示語(yǔ)言,程序提示語(yǔ)言較人性化,不僅大多為祈使語(yǔ)句、疑問(wèn)句,而且提示明確,具有較強(qiáng)的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多
124、樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地看懂程序并進(jìn)行操作。</p><p><b> 【程序的缺點(diǎn)】</b></p><p> 1.本程序沒(méi)有進(jìn)行相應(yīng)的密碼操作,所以對(duì)于使用者來(lái)說(shuō)可能存在比較大的不保密性。需要進(jìn)一步改善。</p><p> 2.本程序沒(méi)有將各個(gè)選課學(xué)生的信息就行各自存檔。為了各個(gè)學(xué)生的隱私,應(yīng)將每個(gè)人的信息
125、分步存檔。</p><p><b> 六、心得體會(huì)</b></p><p> 經(jīng)過(guò)這次C語(yǔ)言實(shí)訓(xùn),我確實(shí)學(xué)到了好多以前不知道的。以前動(dòng)手能力基本為零,我一直覺(jué)得自己是一個(gè)光說(shuō)不練的夢(mèng)想主義者。好在有了這次實(shí)訓(xùn)的機(jī)會(huì),我定要牢牢把握住這次來(lái)之不易的機(jī)會(huì),從開(kāi)始實(shí)訓(xùn)到結(jié)束我一直堅(jiān)持自己先琢磨,先理解問(wèn)題,如有解決不了的我定會(huì)請(qǐng)教身邊的高手,在這個(gè)過(guò)程里我加深了對(duì)程序和
126、與程序有關(guān)的一些知識(shí)的理解。雖說(shuō)我的功底差,但只要有毅力,恒心和信心,我一定會(huì)得到本屬于我的東西,</p><p> 在實(shí)訓(xùn)過(guò)程里我遇到好多問(wèn)題和挫折,但就問(wèn)題而言我一直堅(jiān)持兩個(gè)原則:自己先解決大部分問(wèn)題;對(duì)于不會(huì)的自己在深研,實(shí)在不會(huì)在請(qǐng)教他人。</p><p> 因?yàn)檫@一次是自己親手做的,自己難免有些小小激動(dòng)和高興,不管結(jié)果如何,這一次我真的學(xué)到了自己想要的知識(shí)。首先我對(duì)程序設(shè)計(jì)也
127、有自己的一點(diǎn)看法,程序就是算法和邏輯結(jié)構(gòu)的合成,寫(xiě)程序就是把算法編寫(xiě)成電腦能識(shí)別的字符,調(diào)試之后進(jìn)行編譯運(yùn)行,在算法里加入邏輯結(jié)構(gòu)就可以實(shí)現(xiàn)算法了;其次程序這是個(gè)很神奇的東西,只需幾行代碼就可以變換出來(lái)一個(gè)神奇的世界,自己看著就心動(dòng),這會(huì)讓我越來(lái)越喜歡這種挑戰(zhàn),我對(duì)其中的神秘武器很好奇。</p><p> 在敲代碼的過(guò)程里。我經(jīng)常會(huì)犯很多低級(jí)錯(cuò)誤,那原因就很簡(jiǎn)單了,雖然如此,但我還是每次自己一次又一次的找出錯(cuò)誤
溫馨提示
- 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ǔ)言學(xué)生選修課程系統(tǒng)設(shè)計(jì)--學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)---學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)-----學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)---學(xué)生選修課管理系統(tǒng)
- 課程設(shè)計(jì)報(bào)告---學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告---學(xué)生選修課系統(tǒng)設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生選修課系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生選修課系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生選修課系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告---學(xué)生選修課系統(tǒng)設(shè)計(jì).doc
- c語(yǔ)言課程設(shè)計(jì)-學(xué)生選修課系統(tǒng)設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告--學(xué)生選修課程系統(tǒng)
- c++畢業(yè)課程設(shè)計(jì)--學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- c++課程設(shè)計(jì)報(bào)告--學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- c++課程設(shè)計(jì)學(xué)生選修課選課系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告—學(xué)生選修課程系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告·----學(xué)生選修課系統(tǒng)設(shè)計(jì).doc
- c語(yǔ)言課程設(shè)計(jì)_學(xué)生選修課系統(tǒng)設(shè)計(jì)(1)
評(píng)論
0/150
提交評(píng)論