版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 程序設(shè)計實訓(xùn)</b></p><p><b> 說 明 書</b></p><p> 2015 年 1月 10 日</p><p><b> 選題要求</b></p><p> 假定有n門課程,每門課程有:課程編號,課程名稱,課程性質(zhì)(公共
2、課、必修課、選修課),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。試設(shè)計一選修課程系統(tǒng),使之能提供以下功能:</p><p> ?。?)系統(tǒng)以菜單方式工作</p><p> ?。?)課程信息錄入功能(課程信息用文件保存) </p><p> ?。?)課程信息瀏覽功能</p><p>
3、 (4)課程信息查詢功能,查詢方式分兩種: 按學(xué)分查詢, 按課程性質(zhì)查詢</p><p> ?。?)學(xué)生選修課程:提示選課成功,按照學(xué)生學(xué)號查詢該生所選課程</p><p><b> 考試增加的功能</b></p><p> 按照學(xué)期進行查詢課程信息</p><p> 判斷課程性質(zhì)為公共課的課程
4、信息顯示并存入文件里</p><p> 注:程序共生成三個文件(選修課程信息文件,公共課文件,學(xué)生選課文件)</p><p> 程序設(shè)計方法及主要函數(shù)介紹</p><p> 1.由于C語言是面向過程的語言,所以我的設(shè)計思路是根據(jù)目標(biāo)程序運行的過程來編寫的。</p><p> 我具體的設(shè)計思路如下:</p><p&g
5、t; 我設(shè)計的是學(xué)生選修課管理系統(tǒng),對選修課程能夠進行錄入,查詢和瀏覽操作等,并且要求有菜單界面和退出功能。</p><p> 首先,我考慮到程序的數(shù)據(jù)優(yōu)先輸入,可以先設(shè)置一個選修課登陸界面,然后在該菜單里可進行選修課的錄入,查詢和瀏覽操作,最后將錄入的課程保存到相應(yīng)的文件中。然后定義各種函數(shù)的功能包括查詢(按學(xué)期查找,按學(xué)分查找,按課程性質(zhì)查找)操作等。 </p><p> 另
6、一個為學(xué)生登陸界面,該菜單學(xué)生可以進行課程瀏覽,課程選擇,查詢所選課程等操作,最后將學(xué)生所選的課程信息存入文件(有學(xué)號,課程編號及名稱)中。在進行該操作之前需要對選修課程保存的文件進行讀取,然后對其中的內(nèi)容進行查詢等,在學(xué)生選好課程以后,可以將其選好的課程保存于相應(yīng)的文件中,以便下次進行查詢及修改。</p><p> 通過函數(shù)的層層調(diào)用來實現(xiàn)程序的邏輯結(jié)構(gòu)。中間通過文件的打開和關(guān)閉實現(xiàn)對文件內(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)計函數(shù)</p><p> 三、程序源代碼(包括注釋)</p><p> #include<string.h> //字符串處理函數(shù)
10、 </p><p> #include<stdio.h> //輸入,輸出函數(shù)</p><p> #include<malloc.h> //動態(tài)存儲分配函數(shù)</p><p> #include<stdlib.h> //動態(tài)內(nèi)存分配函數(shù)</p><p> #include<
11、;conio.h> </p><p> typedef struct subjects{//定義一個課程的結(jié)構(gòu)體 </p><p> int num; //課程編號</p><p> char name[20]; //課程名稱</p><p> char kind[1
12、0]; //課程性質(zhì)</p><p> int stime; //總學(xué)時</p><p> int ttime; //授課學(xué)時</p><p> int etime; //實驗或上機學(xué)時</p><p> int score;
13、 //學(xué)分</p><p> char term[20]; //開課學(xué)期 </p><p> struct subjects *next; //next是指針變量,指向結(jié)構(gòu)體變量 </p><p> }SUB;//定義一個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申請空間 </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é)點p申請內(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é)點p賦值給頭指針 </p><p><b> else </b></p><p> tail->next=p;//否則把p
20、賦值給尾指針指向下一個結(jié)點 </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é)點的數(shù)據(jù)域為空 </p><p> return head; </p><p><b> } </b></p><p> void savefile()//保存文件</p><p><b> { </b></p><p>
22、SUB *p; //申明一個SUB型的指針變量p </p><p> FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量 </p><p> fp=fopen("ZSL1314010731.txt","w");//打開文件 </p><p> if(fp==NULL) </p>&l
23、t;p><b> { </b></p><p> printf("\nCannot open the file!\n");//打開文件失敗 </p><p><b> } </b></p><p> fprintf(fp,"課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時
24、 實驗或上機學(xué)時 學(xué)分 開課學(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); //在文件里寫入信息 </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; //申明一個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,"課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實驗或上機學(xué)時 學(xué)分 開
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); //在文本里寫入信息 </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;//申明一個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("請輸入課程信息所在的文件名稱:"); </p&
32、gt;<p> scanf("%s",fname); </p><p> FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p> fp=fopen(fname,"r"); //打開文件</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é)點p申請內(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); //在文本里寫
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;//申明一個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("課程編號 課
38、程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(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; //申明一個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é)點 </p><p>
43、; subj->next=NULL;//下一個結(jié)點為空 </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;//申明一個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請輸入課程編號:");scanf("%d",&subj->num); </p><p> printf("\n\t\
47、t請輸入課程名稱:");scanf("%s",&subj->name); </p><p> printf("\n\t\t請輸入課程性質(zhì):");scanf("%s",&subj->kind); </p><p> printf("\n\t\t請輸入總學(xué)時:");
48、scanf("%d",&subj->stime); </p><p> printf("\n\t\t請輸入授課學(xué)時:");scanf("%d",&subj->ttime); </p><p> printf("\n\t\t請輸入實踐或上機學(xué)時:");scanf("%d&
49、quot;,&subj->etime); </p><p> printf("\n\t\t請輸入學(xué)分:");scanf("%d",&subj->score); </p><p> printf("\n\t\t請輸入開課學(xué)期:");scanf("%s",&subj->
50、term); </p><p> myInsert(subj); //調(diào)用該函數(shù)目的是是否繼續(xù)接受下一個結(jié)點 </p><p> printf("\n添加完畢,新信息存入文件中\(zhòng)n"); </p><p> printf("\n繼續(xù)插入請按回車\n"); </p><p> printf(&qu
51、ot;\n結(jié)束添加課程按0: [ ]\b\b"); </p><p> ch1=getchar(); //將回車鍵賦給CH1,否則subj->term輸完后輸入的回車鍵會賦給CH,因此用CH1填補。</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;//申明一個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("輸入想要刪除的課程編號:[ ]\b\b\b\b\b"); </p><p> sca
54、nf("%d",&num); </p><p> if(head->num==num) { </p><p> p2=head; //以下為刪除結(jié)點操作 </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ù)刪除請按回車\n"); </p><p> printf("\n結(jié)束刪除課程按 0: [ ]\b\b"); </p><p> ch1=getchar(
58、);//將回車鍵賦給CH1,否則num輸完后再輸入的回車鍵會賦給CH,因此用CH1填補。</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;//申明一個SUB型的指針變量ptr</p><p> FILE *fp;//fp是指向FILE結(jié)構(gòu)的指針變量 &l
61、t;/p><p> fp=fopen("GonggkInfor.txt","w");//打開文件 </p><p> printf("請輸入要查找的課程性質(zhì):"); </p><p> scanf("%s",min);</p><p> printf(&q
62、uot;課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n"); </p><p> for(ptr=head;ptr;ptr=ptr->next) </p><p><b> {</b></p><p> if(strcmp(min,ptr->kind)==0)//通過
63、比較兩個字符串來進行實現(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,"課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(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);//在文本里寫入信息 <
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; //申明一個SUB型的指針變量ptr </p><p>
71、 L1:system("cls");//清屏功能,每次操作完返回到該功能首菜單 </p><p> printf("\n\n\t\t**********請選擇查詢方式*************\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請選擇(1-4):[ ]\b\b"); </p><p> scanf("%d",&a); </p><p> switch(a) { </p><p>
74、case 1:printf("請輸入要查找的課程學(xué)期:"); </p><p> scanf("%s",min); </p><p> printf("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n"); </p><p> for(ptr=head;
75、ptr;ptr=ptr->next) </p><p><b> {</b></p><p> if(strcmp(min,ptr->term)==0)//通過比較兩個字符串來進行實現(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;//再次返回到該菜單進行下一個操作 </p><p> case 2:printf("請輸入要查找的課程的性質(zhì):");
78、</p><p> scanf("%s",type); </p><p> printf("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(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("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(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("請選擇(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é)號 </p><p> int cnum;//所選課程編號 </p><p> char cname[20];//所選課程名稱 </p><p>
93、 };//定義一個學(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 請輸入您的學(xué)號及您要選擇的課程編號:"); </p><p> scanf("%d %d",&s.snum,&s.cnum)
95、;</p><p> fp=fopen("ZSL1314010731.txt","r");</p><p> if(fp==NULL) //打開選課記錄文件"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é)點申請空間 </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) //通過學(xué)生選課輸入的編號,和選修課程中的編號進行匹配,若匹配成功就結(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é)號,所選課程編號,課程名稱寫入文件里 </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)計函數(shù) </p><p><b> {
102、 </b></p><p> int total=0;//人數(shù)統(tǒng)計變量</p><p> FILE *fp;//fp是指向FILE結(jié)構(gòu)的指針變量</p><p> struct student s;//定義一個student結(jié)構(gòu)體類型的變量s </p><p> if((fp=fopen("student.txt
103、","r"))==NULL)//打開選課記錄文件"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é)號 課程編號 課程名稱\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("請選擇(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("請選擇(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> 程序運行界面</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> 將公共課的課程信息寫入’GonggkInfor.txt’文件</p><p><b> 學(xué)生選課菜單</b></p><p><b> a
120、>學(xué)生開始選課</b></p><p> 將學(xué)生選課信息存入’student.txt’文件</p><p> b>查詢學(xué)生所選課程</p><p><b> 返回主菜單</b></p><p><b> 生成的三個文件</b></p><p>
121、<b> 程序的優(yōu)點和不足</b></p><p><b> 【程序的優(yōu)點】</b></p><p> 算法是程序的靈魂,程序的優(yōu)點首先表現(xiàn)在算法上的優(yōu)點,其次才是功能上的。</p><p> ?。鬯惴ㄉ系膬?yōu)點]主要體現(xiàn)在以下三點:</p><p> 該程序采用main主函數(shù)方式設(shè)計,程序的
122、主體的功能大都由該功能完成。程序如此設(shè)計有利于程序的進一步改進及有助于程序執(zhí)行效率的提高。</p><p> 程序?qū)ξ募?shù)據(jù)的讀寫采用了fread和fwrite塊讀寫函數(shù),能夠?qū)⑽募械臄?shù)據(jù)完全讀出,然后賦到定義的數(shù)組中,再在相應(yīng)的數(shù)組中進行一系列操作,最終再寫入文件。</p><p> 插入操作在本程序中是將課程信息插入到鏈表的最后一個節(jié)點,從而減少了數(shù)據(jù)的相互移動,節(jié)省了時間,提高
123、了效率。</p><p> ?。酃δ苌系膬?yōu)點]主要體現(xiàn)在以下兩點:</p><p> 1.有簡潔明了的程序菜單。程序主要采用了層次嵌套的菜單,相互獨立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。</p><p> 有人性化的程序提示語言,程序提示語言較人性化,不僅大多為祈使語句、疑問句,而且提示明確,具有較強的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多
124、樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地看懂程序并進行操作。</p><p><b> 【程序的缺點】</b></p><p> 1.本程序沒有進行相應(yīng)的密碼操作,所以對于使用者來說可能存在比較大的不保密性。需要進一步改善。</p><p> 2.本程序沒有將各個選課學(xué)生的信息就行各自存檔。為了各個學(xué)生的隱私,應(yīng)將每個人的信息
125、分步存檔。</p><p><b> 六、心得體會</b></p><p> 經(jīng)過這次C語言實訓(xùn),我確實學(xué)到了好多以前不知道的。以前動手能力基本為零,我一直覺得自己是一個光說不練的夢想主義者。好在有了這次實訓(xùn)的機會,我定要牢牢把握住這次來之不易的機會,從開始實訓(xùn)到結(jié)束我一直堅持自己先琢磨,先理解問題,如有解決不了的我定會請教身邊的高手,在這個過程里我加深了對程序和
126、與程序有關(guān)的一些知識的理解。雖說我的功底差,但只要有毅力,恒心和信心,我一定會得到本屬于我的東西,</p><p> 在實訓(xùn)過程里我遇到好多問題和挫折,但就問題而言我一直堅持兩個原則:自己先解決大部分問題;對于不會的自己在深研,實在不會在請教他人。</p><p> 因為這一次是自己親手做的,自己難免有些小小激動和高興,不管結(jié)果如何,這一次我真的學(xué)到了自己想要的知識。首先我對程序設(shè)計也
127、有自己的一點看法,程序就是算法和邏輯結(jié)構(gòu)的合成,寫程序就是把算法編寫成電腦能識別的字符,調(diào)試之后進行編譯運行,在算法里加入邏輯結(jié)構(gòu)就可以實現(xiàn)算法了;其次程序這是個很神奇的東西,只需幾行代碼就可以變換出來一個神奇的世界,自己看著就心動,這會讓我越來越喜歡這種挑戰(zhàn),我對其中的神秘武器很好奇。</p><p> 在敲代碼的過程里。我經(jīng)常會犯很多低級錯誤,那原因就很簡單了,雖然如此,但我還是每次自己一次又一次的找出錯誤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言學(xué)生選修課程系統(tǒng)設(shè)計--學(xué)生選修課程系統(tǒng)設(shè)計
- 學(xué)生選修課程系統(tǒng)設(shè)計
- 學(xué)生選修課程系統(tǒng)設(shè)計
- 課程設(shè)計---學(xué)生選修課程系統(tǒng)設(shè)計
- 課程設(shè)計-----學(xué)生選修課程系統(tǒng)設(shè)計
- 課程設(shè)計---學(xué)生選修課管理系統(tǒng)
- 課程設(shè)計報告---學(xué)生選修課程系統(tǒng)設(shè)計
- 課程設(shè)計報告---學(xué)生選修課系統(tǒng)設(shè)計
- c語言課程設(shè)計學(xué)生選修課系統(tǒng)
- c語言課程設(shè)計--學(xué)生選修課系統(tǒng)
- c語言課程設(shè)計--學(xué)生選修課系統(tǒng)設(shè)計
- 課程設(shè)計報告---學(xué)生選修課系統(tǒng)設(shè)計.doc
- c語言課程設(shè)計-學(xué)生選修課系統(tǒng)設(shè)計
- c語言課程設(shè)計報告--學(xué)生選修課程系統(tǒng)
- c++畢業(yè)課程設(shè)計--學(xué)生選修課程系統(tǒng)設(shè)計
- c++課程設(shè)計報告--學(xué)生選修課程系統(tǒng)設(shè)計
- c++課程設(shè)計學(xué)生選修課選課系統(tǒng)
- c語言課程設(shè)計報告—學(xué)生選修課程系統(tǒng)設(shè)計
- 課程設(shè)計報告·----學(xué)生選修課系統(tǒng)設(shè)計.doc
- c語言課程設(shè)計_學(xué)生選修課系統(tǒng)設(shè)計(1)
評論
0/150
提交評論