




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、任務(wù)書課程設(shè)計任務(wù)書分院(系)信息科學(xué)與工程學(xué)院專業(yè)電子信息工程學(xué)生姓名 學(xué)號 設(shè)計題目學(xué)生選課管理內(nèi)容及要求: 采用結(jié)構(gòu)體數(shù)組實現(xiàn)能夠輸入并保存基本信息到文件中,可以添加、修改、刪除某人(或車,書,房間)的信息??梢园椿拘畔⒅械哪硯醉棇崿F(xiàn)信息查詢功能。進(jìn)度安排:18周:確定算法,進(jìn)行初步設(shè)計(總體設(shè)計)、詳細(xì)設(shè)計、模塊編碼等,編碼調(diào)試,測試數(shù)據(jù),撰寫論文,驗收并答辯。指導(dǎo)教師(簽字): 年 月 日學(xué)院院長(簽字): 年 月 日 目錄 1 題目內(nèi)容-p3 2 程序特點及功能-p3 3 總體思路-p3 4 詳細(xì)設(shè)計-p3 5 程序清單-p4 6 運行結(jié)果分析-p36 7 參考文獻(xiàn)-p37 正文
2、題目: 學(xué)生選課管理1 課程設(shè)計目的及要求目的 : a綜合運用所學(xué)的c語言知識進(jìn)行編程.b進(jìn)一步了解掌握c的基本語法.c開始逐步培養(yǎng)編程思維,完善編程思維漏洞.d側(cè)重對c中數(shù)組函數(shù)指針結(jié)構(gòu)體和文件等相關(guān)內(nèi)容的綜合應(yīng)用.e進(jìn)一步提升自己的編程能力,為以后學(xué)習(xí)開始奠基.要求 :采用結(jié)構(gòu)體數(shù)組實現(xiàn)能夠輸入并保存基本信息到文件中,可以添加、修改、刪除某人(或車,書,房間)的信息??梢园椿拘畔⒅械哪硯醉棇崿F(xiàn)信息查詢功能。2 相關(guān)知識函數(shù)的調(diào)用,指針,數(shù)組,結(jié)構(gòu)體,鏈表。程序特點及功能a特點:程序簡單易懂b功能:各種基本信息數(shù)據(jù)的錄入;各種基本數(shù)據(jù)的修改;各種基本數(shù)據(jù)的插入;各種基本數(shù)據(jù)的刪除;基于各種
3、數(shù)據(jù)的查詢;基于各種數(shù)據(jù)的計算。3 總體思路以及設(shè)計方案;(流程圖、功能模塊圖、詳細(xì)設(shè)計等) a 具體流程4 程序代碼實現(xiàn); #include #includeint n1,n2,kk1,kk2,kk3;struct couse * head1;struct student * head2;struct couse/課程信息結(jié)構(gòu)體 int num1; char name120; int score; int nelepeo;/課程已選人數(shù) int melepeo;/課程人數(shù)上限 struct couse * next;struct student/學(xué)生信息結(jié)構(gòu)體 int num2; char
4、name220; int nelenum50;/已選課程編號 int nelen;/已選課程數(shù)量 struct student * next;void ms() for(kk1=0;kk11100;kk1+) for(kk2=0;kk21200;kk2+) for(kk3=0;kk3num1,p1-name1,&p1-score,&p1-melepeo);p1-nelepeo=0;head1=null;while(p1-num1!=0) n1=n1+1; if(n1=1)head1=p1; else p2-next=p1; p2=p1; p1=(struct couse * )malloc(s
5、izeof(struct couse); scanf(%d%s%d%d,&p1-num1,p1-name1,&p1-score,&p1-melepeo); p1-nelepeo=0;p2-next=null;void filec()/錄入鍵盤子函數(shù)(從文件錄入) file * fp; char filepath20; struct couse *p1,*p2; n1=0; printf(輸入要讀入的文件路徑:); getchar(); gets(filepath); if(fp=fopen(filepath,r)=null) printf(找不到%s文件!n,filepath); exit(0
6、); p1=p2=(struct couse*)malloc(sizeof(struct couse); fscanf(fp,%d%s%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-melepeo); head1=null; while(!feof(fp) n1=n1+1; if(n1=1)head1=p1; else p2-next=p1; p2=p1; p1=(struct couse * )malloc(sizeof(struct couse); fscanf(fp,%d%s%d%d%d,&p1-num1,p1-name1,&p1-s
7、core,&p1-nelepeo,&p1-melepeo); p2-next=null;void inputc()/錄入課程主函數(shù) int i; printf(ttt錄入課程信息n); printf(n1.從鍵盤錄入n); printf(2.從文件錄入n); printf(3.返回主菜單n); printf(請選擇(13):n); scanf(%d,&i); switch(i) case(1):keyboardc();break; case(2):filec();break; case(3):break; void insertc(struct couse *incouse)/課程管理子函數(shù)(
8、增加課程) struct couse *p0,*p1,*p2; p1=head1; p0=incouse; if(head1=null) head1=p0; p0-next=null; else while(p0-num1 p1-num1) & (p1-next!=null) p2=p1; p1=p1-next; if(p0-num1 num1) if(head1=p1) head1=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=null; n1=n1+1;void delc(int num1)/課程管理子函數(shù)(刪除課程)
9、struct couse *p1,*p2; if(head1=null) printf(n沒有課程,無法刪除!n); goto end; p1=head1; while(num1!=p1-num1 & p1-next!=null) p2=p1; p1=p1-next; if(num1=p1-num1) if(p1=head1) head1=p1-next; else p2-next=p1-next; printf(已刪除該編號課程!n); n1=n1-1; else printf(無該編號的課程!n); end:;void managementc()/課程管理主函數(shù) struct couse
10、* incouse; int i,num1; printf(ttt課程管理n); printf(1.新增課程n); printf(2.刪除課程n); printf(3.返回主菜單n); printf(請選擇(13):n); scanf(%d,&i); switch(i) case(1): incouse=(struct couse *)malloc(sizeof(struct couse); printf(課程編號t課程名稱t學(xué)分t課程人數(shù)上限n); scanf(%d%s%d%d,&incouse-num1,incouse-name1,&incouse-score,&incouse-melep
11、eo); incouse-nelepeo=0; insertc(incouse); break; case(2): printf(請輸入要刪除課程的編號:n); scanf(%d,&num1); delc(num1); break; case(3):break; void keyboards()/錄入學(xué)生信息子函數(shù)(從鍵盤錄入) int i; struct student *p1,*p2; n2=0; p1=p2=(struct student *)malloc(sizeof(struct student); printf(學(xué)生學(xué)號t學(xué)生姓名n); scanf(%d%s,&p1-num2,p1
12、-name2); p1-nelen=0; for(i=0;inelenumi=0; head2=null; while(p1-num2!=0) n2=n2+1; if(n2=1)head2=p1; else p2-next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student); scanf(%d%s,&p1-num2,p1-name2); p1-nelen=0; for(i=0;inelenumi=0; p2-next=null;void files()/錄入學(xué)生信息子函數(shù)(從文件錄入) int i=0; file * f
13、p; char filepath20; struct student *p1,*p2; n2=0; printf(輸入要讀入的文件路徑:); getchar(); gets(filepath); if(fp=fopen(filepath,r)=null) printf(找不到%s文件!n,filepath); exit(0); p1=p2=(struct student*)malloc(sizeof(struct student); fread(p1,sizeof(struct student),1,fp); head2=null; while(!feof(fp) i=0; n2=n2+1;
14、if(n2=1)head2=p1; else p2-next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student); fread(p1,sizeof(struct student),1,fp); p2-next=null;void inputs()/錄入學(xué)生信息主函數(shù) int i; printf(ttt錄入學(xué)生信息n); printf(n1.從鍵盤錄入n); printf(2.從文件錄入n); printf(3.返回主菜單n); printf(請選擇(13):n); scanf(%d,&i); switch(i) case
15、(1):keyboards();break; case(2):files();break; case(3):break; void inserts(struct student * incouse)/學(xué)生信息管理子函數(shù)(填加學(xué)生信息) struct student *p0,*p1,*p2; p1=head2; p0=incouse; if(head2=null) head2=p0; p0-next=null; else while(p0-num2 p1-num2) & (p1-next!=null) p2=p1; p1=p1-next; if(p0-num2 num2) if(head2=p1
16、) head2=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=null; n2=n2+1;void dels(int num2)/學(xué)生信息管理子函數(shù)(刪除學(xué)生信息) struct student *p1,*p2; if(head2=null) printf(n沒有該學(xué)生信息,無法刪除!n); goto end; p1=head2; while(num2!=p1-num2 & p1-next!=null) p2=p1; p1=p1-next; if(num2=p1-num2) if(p1=head2) head2=p1-nex
17、t; else p2-next=p1-next; printf(已刪除該學(xué)生信息!n); n2=n2-1; else printf(無該學(xué)號的學(xué)生!n); end:;void managements()/學(xué)生信息管理主函數(shù) struct student * incouse; int i,num2; printf(ttt學(xué)生信息管理n); printf(1.新增學(xué)生信息n); printf(2.刪除學(xué)生信息n); printf(3.返回主菜單n); printf(請選擇(13):n); scanf(%d,&i); switch(i) case(1): incouse=(struct studen
18、t *)malloc(sizeof(struct student); incouse-nelen=0; incouse-nelenum0=0; printf(學(xué)生學(xué)號t學(xué)生姓名n); scanf(%d%s,&incouse-num2,incouse-name2); inserts(incouse); break; case(2): printf(請輸入要刪除學(xué)生的學(xué)號:n); scanf(%d,&num2); dels(num2); break; case(3):break; void elect(struct student * s)/選課 struct couse * p; int num
19、1,i; printf(請輸入要選課的編號:n); scanf(%d,&num1); for(i=0;s-nelenumi!=0;i+); s-nelenumi=num1; (s-nelen)+; p=head1; while(p-num1!=num1) p=p-next; (p-nelepeo)+;void cheak()/學(xué)生選課子函數(shù)(查詢可選課程) char e; struct couse * c; struct student * s; int num2,i,j=0,t=0; printf(請輸入你的學(xué)號:); scanf(%d,&num2); s=head2; while(s-nu
20、m2!=num2 & s-next!=null) s=s-next; if(s-num2!=num2) printf(不存在你的信息,請進(jìn)入主菜單錄入你的信息!n); goto end; c=head1; printf(你的可選課程編號:n); while(c!=null) for(t=0,i=0;s-nelenumi!=0;i+) if(c-num1=s-nelenumi) t=1; if(t=0 & (c-nelepeo!=c-melepeo) printf(%dn,c-num1); j+; c=c-next; if(j=0) printf(你已選完所有課程,無法再多選!n); goto
21、end; printf(選課(y/n)?:n); getchar(); e=getchar(); i=0; while(e=y) elect(s); printf(繼續(xù)選課(y/n)?:n); getchar(); e=getchar(); end:;void back(struct student * p)/退課 struct couse * p1; int num1,i,j; printf(請輸入你要退掉的課程編號:n); scanf(%d,&num1); p1=head1; while(p1-num1!=num1) p1=p1-next; for(i=0;p-nelenumi!=num1
22、;i+); for(j=i;p-nelenumj!=0;j+) p-nelenumj=p-nelenumj+1; p-nelenum-j=0; (p1-nelepeo)-; printf(退課成功!n);void hcheak()/學(xué)生選課子函數(shù)(查詢已選課程) char c; struct couse * p0; struct student * p; int num2,i,f=0; printf(請輸入學(xué)號:n); scanf(%d,&num2); p=head2; while(p-num2!=num2 & p!=null) p=p-next; if(p=null) printf(不存在你
23、的信息,請回主菜單錄入信息:n); goto end; printf(已選課程編號:n); if(p-nelenum0=0) printf(你還沒選課!n); goto end; for(i=0;p-nelenumi!=0;i+) printf(%dn,p-nelenumi); p0=head1; while(p0-num1!=p-nelenumi) p0=p0-next; f=f+p0-score; printf(總學(xué)分:%dn,f); printf(是否進(jìn)行退課(y/n)?); getchar(); c=getchar(); while(c=y) back(p); printf(繼續(xù)退課(
24、y/n)?); getchar(); c=getchar(); (p-nelen)-; end:;void elective()/學(xué)生選課主函數(shù) int i; printf(ttt學(xué)生選課n); printf(1.查詢可選課程n); printf(2.查詢已選課程n); printf(3.返回主菜單n); printf(請輸入(13):n); scanf(%d,&i); switch(i) case(1):cheak();break; case(2):hcheak();break; case(3):break; void listc()/輸出課程信息 struct couse * p; p=h
25、ead1; printf(課程編號 課程名稱 學(xué)分 課程已選人數(shù) 課程人數(shù)上限n); while(p!=null) printf(%-8d%10s%6d%8d%12dn,p-num1,p-name1,p-score,p-nelepeo,p-melepeo); p=p-next; void lists()/輸出學(xué)生信息 struct student * p; p=head2; printf(學(xué)生學(xué)號 學(xué)生姓名 已選課程數(shù)量n); while(p!=null) printf(%-4d %10s %6dn,p-num2,p-name2,p-nelen); p=p-next; void intoc()
26、/存儲課程信息 file * fp; struct couse * p; char filepath30; printf(輸入課程信息要保存的文件路徑:); getchar(); gets(filepath); if(fp=fopen(filepath,w)=null) printf(n保存失敗!); exit(0); p=head1; while(p!=null) fprintf(fp,%d %s %d %d %dn,p-num1,p-name1,p-score,p-nelepeo,p-melepeo); p=p-next; fclose(fp); printf(課程信息已保存在%s中!n,
27、filepath); void intos()/存儲學(xué)生信息 file * fp; struct student * p; char filepath30; printf(輸入學(xué)生信息要保存的文件路徑:); getchar(); gets(filepath); if(fp=fopen(filepath,w)=null) printf(n保存失敗!); exit(0); p=head2; while(p!=null) fwrite(p,sizeof(struct student),1,fp); p=p-next; fclose(fp); printf(學(xué)生信息已保存在%s中!n,filepath
28、); void into()/存儲信息 int i; printf(1.存儲課程信息n); printf(2.存儲學(xué)生信息n); printf(3.返回主菜單n); printf(請輸入(13)n); scanf(%d,&i); switch(i) case(1):intoc();break; case(2):intos();break; case(3):break; void store()/信息主函數(shù) int i; printf(tt系統(tǒng)信息查看及存儲n); printf(1.查看課程信息n); printf(2.查看學(xué)生信息n); printf(3.存儲信息n); printf(4.返回
29、主菜單n); printf(請輸入(14):n); scanf(%d,&i); switch(i) case(1):listc();break; case(2):lists();break; case(3):into();break; case(4):break; int main()/主函數(shù) int i; start: printf(nttt歡迎使用學(xué)生選課系統(tǒng)!n); printf(菜單:n); printf(1.錄入課程信息n); printf(2.課程管理n); printf(3.錄入學(xué)生信息n); printf(4.學(xué)生信息管理n); printf(5.學(xué)生選課n); printf(
30、6.系統(tǒng)信息查看及存儲n); printf(7.退出系統(tǒng)n); printf(n請輸入菜單選項(17):n); scanf(%d,&i); if(i7) printf(輸入錯誤,請重輸:n); goto start; switch(i) case(1): system(cls); inputc(); goto start; break; case(2): system(cls); managementc(); goto start; break; case(3): system(cls); inputs(); goto start; break; case(4): system(cls); m
31、anagements(); goto start; break; case(5): system(cls); elective(); goto start; break; case(6): system(cls); store(); goto start; break; case(7): system(cls); printf(感謝使用本系統(tǒng)!nn再見!n); return(0);#include #includeint n1,n2,kk1,kk2,kk3;struct couse * head1;struct student * head2;struct couse/課程信息結(jié)構(gòu)體 int
32、num1; char name120; int score; int nelepeo;/課程已選人數(shù) int melepeo;/課程人數(shù)上限 struct couse * next;struct student/學(xué)生信息結(jié)構(gòu)體 int num2; char name220; int nelenum50;/已選課程編號 int nelen;/已選課程數(shù)量 struct student * next;void ms() for(kk1=0;kk11100;kk1+) for(kk2=0;kk21200;kk2+) for(kk3=0;kk3num1,p1-name1,&p1-score,&p1-m
33、elepeo);p1-nelepeo=0;head1=null;while(p1-num1!=0) n1=n1+1; if(n1=1)head1=p1; else p2-next=p1; p2=p1; p1=(struct couse * )malloc(sizeof(struct couse); scanf(%d%s%d%d,&p1-num1,p1-name1,&p1-score,&p1-melepeo); p1-nelepeo=0;p2-next=null;void filec()/錄入鍵盤子函數(shù)(從文件錄入) file * fp; char filepath20; struct cous
34、e *p1,*p2; n1=0; printf(輸入要讀入的文件路徑:); getchar(); gets(filepath); if(fp=fopen(filepath,r)=null) printf(找不到%s文件!n,filepath); exit(0); p1=p2=(struct couse*)malloc(sizeof(struct couse); fscanf(fp,%d%s%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-melepeo); head1=null; while(!feof(fp) n1=n1+1; if(n1=
35、1)head1=p1; else p2-next=p1; p2=p1; p1=(struct couse * )malloc(sizeof(struct couse); fscanf(fp,%d%s%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-melepeo); p2-next=null;void inputc()/錄入課程主函數(shù) int i; printf(ttt錄入課程信息n); printf(n1.從鍵盤錄入n); printf(2.從文件錄入n); printf(3.返回主菜單n); printf(請選擇(13):n); scan
36、f(%d,&i); switch(i) case(1):keyboardc();break; case(2):filec();break; case(3):break; void insertc(struct couse *incouse)/課程管理子函數(shù)(增加課程) struct couse *p0,*p1,*p2; p1=head1; p0=incouse; if(head1=null) head1=p0; p0-next=null; else while(p0-num1 p1-num1) & (p1-next!=null) p2=p1; p1=p1-next; if(p0-num1 nu
37、m1) if(head1=p1) head1=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=null; n1=n1+1;void delc(int num1)/課程管理子函數(shù)(刪除課程) struct couse *p1,*p2; if(head1=null) printf(n沒有課程,無法刪除!n); goto end; p1=head1; while(num1!=p1-num1 & p1-next!=null) p2=p1; p1=p1-next; if(num1=p1-num1) if(p1=head1) head1=p1-next; else p2-next=p1
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上半年安徽省宿州市不動產(chǎn)登記中心招聘30人易考易錯模擬試題(共500題)試卷后附參考答案
- 2024福建福州榕發(fā)(福州)置業(yè)有限公司招聘筆試參考題庫附帶答案詳解
- 2025年上半年安徽宿州市疾病預(yù)制中心緊急招聘22人易考易錯模擬試題(共500題)試卷后附參考答案
- 2024年平板型太陽熱水器投資申請報告代可行性研究報告
- 2025年上半年安徽國資國企研究院限公司公開招聘工作人員4名易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽六安市皋翔公證處招考2人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽亳州市交通資產(chǎn)管理限責(zé)任公司工程專業(yè)技術(shù)人員招聘36人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽三環(huán)電力工程集團(tuán)限公司招聘第二批電工類易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年寧波江北區(qū)招考事業(yè)編制工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年寧波北侖區(qū)檔案局招考工作人員1名易考易錯模擬試題(共500題)試卷后附參考答案
- GB/T 45229-2025劇場工藝安全要求
- 2025年廣州市黃埔區(qū)東區(qū)街招考社區(qū)居委會專職工作人員高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年黑龍江省高職單招《職測》高頻必練考試題庫400題(含答案)
- GB 45184-2024眼視光產(chǎn)品元件安全技術(shù)規(guī)范
- 2025年湖南科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025年新人教版八年級下冊物理全冊教案
- 《建筑電氣設(shè)計》課件
- 2025年第六屆美麗中國國家版圖知識競賽題庫及答案
- 品管圈PDCA案例-介入中心提高手術(shù)患者交接記錄書寫合格率醫(yī)院品質(zhì)管理成果匯報
- 第十七屆山東省職業(yè)院校技能大賽中職組“西式烹飪”賽項規(guī)程
- 華東師范大學(xué)《外國人文經(jīng)典(下)》2022-2023學(xué)年第一學(xué)期期末試卷
評論
0/150
提交評論