C 語言課程設計 學生選課系統
《C 語言課程設計 學生選課系統》由會員分享,可在線閱讀,更多相關《C 語言課程設計 學生選課系統(21頁珍藏版)》請在裝配圖網上搜索。
1、精品文檔,僅供學習與交流,如有侵權請聯系網站刪除 實踐教學 蘭州理工大學 計算機與通信學院 2011年春季學期 C程序設計 課程設計 題 目:學生選課系統 專業(yè)班級: 姓 名: 學 號: 指導教師: 成 績: 【精品文檔】第 18 頁 摘 要 學生選課系統是一個教育單位不可缺少的重要系統組成部分,它對于學校的決策者、管理者管理、查看課程來說都有至關重要,所以學生選課管理系統應該能夠為廣大學、師生提供充足的信息和快捷的課程選擇過程,有助于學生選好每一門課
2、程,此系統系統選課方便、快捷,用簡單的界面來展示學生的選課信息,應用簡單明了、存儲量大、可靠性高、保密性好、壽命長、成本低等優(yōu)點,可以極大的提高對學生信息管理的效率。利用C語言開發(fā),實現了簡單的學生課程信息的錄入、修改、查詢、刪除等操作,并且能夠利用文件系統長久的保留原始數據。 目 錄 一、需求分析 1 二、總體設計 1 三、詳細設計 2 1、數據定義 3 2、算法流程圖 3 四、編碼 6 五、調試 7 六、設計總結 10 致謝 11 參考文獻 12 附錄 13 一、需求分析 語言文字描述系統要做什么 數據結構可用結構體,包括課程和選修兩個結構體,其中課程結
3、構體成員結構體成員包括課程編號,課程名稱,課程性質,總學時,授課學時,實驗或上機學時,學分,開課學期。選修結構體成員包括學號,課程編號,該結構體的建立主要是為了查詢某門課程學生選修情況。 二、總體設計 系統由哪幾個功能模塊構成,給出功能模塊圖。C中模塊化的工具是函數 根據上面的需求分析,可以將這個系統的設計分為如下七大模塊: 選課模塊、按學分查找模塊、按編號查找模塊、查看課程模塊、查看選課情況模塊、課程輸入模塊、完成選擇模塊。 菜單選擇模塊 學生選課 錄入課程信息 課程 管理 學生信息 管 理 系統信息查看及儲存 退出系統 錄入學生信息 完成選擇模
4、塊 三、詳細設計 1根據n的值調用各功能模塊函數 輸入n,判斷n是否是1-7 顯示一系列功能選項 .數據定義 2,算法流程圖 (1)錄入課程信息表 錄入課程信息 顯示錄入成功,轉入完成選擇菜單 保存信息到student.txt 輸入課程編號 從文件輸入 新 增 課 程 (2)課程管理 輸入課程 信息 Y 顯示失敗 保 存
5、 (3)錄入課程信息 錄入課程信息 輸 入 數 據 Y 保 存 (4)學生信息管理 新增學生信息 或刪除學生信息 輸入姓名,考號. Y Y 保 存 (5)學生選課 學 生 選 課 查詢可選課 程 查詢已選課 程 返回主 菜 單 輸 入 學 號 輸 入 學 號 (6)系統信息及查看系統 主菜單 系統信息及查看系統 查看課程信息 查看學生信息 存儲信息 返回主菜單 存儲課程信息 存儲學生信息
6、返回主菜單 輸 入 路 徑,保存 完成選擇菜單模塊 (7)退出系統 退出系統 四、編碼 1.struct couse * head1;結構 2. void keyboardc()//錄入課程子函數(從鍵盤錄入) 3. void filec()//錄入鍵盤子函數(從文件錄入) 4. void inputc()//錄入課程主函數 5. void insertc(struct couse *incouse)//課程管理子函數(增加課程) 6. void delc(int num1)//課程管理子函數(刪除課程) 7. void elect(struct student
7、 * s)//選課 8. void cheak()//學生選課子函數(查詢可選課程) 9. void back(struct student * p)//退課 10. void hcheak()//學生選課子函數(查詢已選課程) 11.void elective()//學生選課主函數 12.void listc()//輸出課程信息 13.void lists()//輸出學生信息 14.void intoc()//存儲課程信息 15.void intos()//存儲學生信息 16.void into()//存儲信息 17.void store()//信息主函數 18. in
8、t main()//主函數 五、測試 1.主菜單 2.錄入課程信息 3,從文件輸入 4,學生選課菜單 5,學生信息管理 6,管理員輸入課程信息界面: 六、設計總結 問題一:無法讀取文txt文件。 困難就是txt 無法讀取,輸入路徑后沒有文件顯示。 解決辦法是,向老師求助。 最后,在老師細心的指導下,才知道是自己的計算機操作水平緣故,沒有很好的了解計算機路徑結構,最后做出了一定的修改,才得以實現。 問題二:程序錯誤。 這是一個比較典型的錯誤,通過查閱書本相關資料。才發(fā)覺是函數相關問題,沒有能夠很好的理解函數思想,導致程序運行錯誤。 致謝 在這次c語言課程設
9、計中,首先得感謝周老師給予我們指導與幫助,在她的指導幫助下,才使得我們能夠順利的完成課程設計,更重要的是在這次課程設計中,極大的提高我的c語言設計能力,也讓我深刻的了解到自己在這方面的諸多不足,使得我能更清楚的了解自己的水平,加強了我對這門學科的認識。同時也感謝和我一起完成這課設的王云龍同學,我們在互相交流幫助中也相互學習到許多小的應用技巧,解決了一些列問題。還要感謝那些給予我們幫助的同學,也給了我很大的幫助。 參考文獻 1.姜靈芝,余健. C語言課程設計案例精編.北京:清華大學出版社,2008 2.王新,孫雷. C語言課程設計.北京:清華大學出版社,2009 3.游洪躍、彭駿、譚斌
10、.C語言程序設計實驗與課程設計教程.北京:清華大學出版社,2011
4.王連相.C/C++程序設計上機指導與測試. 北京:中國鐵道出版社,2006
5.C語言函數手冊,機械工業(yè)出版社,1999
附錄
#include
11、;//課程性質i int ztime;//課程總學時 int stime;//授課學時 int shiyan;//實驗學時 int score;//學分 long int date;//開學學期 int nelepeo;//課程已選人數 int Melepeo;//課程人數上限 struct couse * next; struct student//學生信息結構體 int num2; char name2[20]; int nelenum[50];//已選課程編號 int nelen;//已選課程數量
12、 struct student * next; void Ms() for(kk1=0;kk1<1100;kk1++) for(kk2=0;kk2<1200;kk2++) for(kk3=0;kk3<1200;kk3++); void keyboardc()//錄入課程子函數(從鍵盤錄入) struct couse *p1,*p2; N1=0; p1=p2=(struct couse*)malloc(sizeof(struct couse)); printf("課程編號
13、課程名稱 課程性質 總學時 授課學時 實驗學時 學分 開課學期 人數上限\n"); scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&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;
14、 p1=(struct couse * )malloc(sizeof(struct couse)); scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo); p1->nelepeo=0; p2->next=NULL; void filec()//錄入鍵盤子函數(從文件錄入) FILE * fp; char filepath[20];
15、 struct couse *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%s%d%d%d%d%d",&p1->num1
16、,&p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo); printf("課程編號 課程名稱 課程性質 總學時 授課學時 實驗學時 學分 開課學期 人數上限\n"); fprintf(stdout,"%d\t %s\t%s\t %d\t%d\t%d\t%d\t%d\t%d\n",p1->num1,p1->name1,p1->xinzhi,p1->ztime,p1->stime,p1->shiyan,p1->score,p1->date,p1->Mele
17、peo); 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%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1
18、->score,&p1->date,&p1->Melepeo); fprintf(stdout,"%d %s %s %d %d %d %d %d %d\n",p1->num1,p1->name1,p1->xinzhi,p1->ztime,p1->stime,p1->shiyan,p1->score,p1->date,p1->Melepeo); p2->next=NULL; void inputc()//錄入課程主函數 int i; printf("\t\t\t錄入課程信息\n"); printf("\n1.從鍵盤錄入\n"); prin
19、tf("2.從文件錄入\n"); printf("3.返回主菜單\n"); printf("請選擇(1~3):\n"); scanf("%d",&i); switch(i) case(1):keyboardc();break; case(2):filec();break; case(3):break; void insertc(struct couse *incouse)//課程管理子函數(增加課程) struct couse *p0,*p1,*p2; p1=head1; p0=incouse
20、; 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 <= p1->num1) if(head1==p1) head1=p0; else p2->next=p0; p0->nex
21、t=p1; else p1->next=p0; p0->next=NULL; N1=N1+1; void delc(int num1)//課程管理子函數(刪除課程) struct couse *p1,*p2; if(head1==NULL) printf("\n沒有課程,無法刪除!\n"); goto end; p1=head1; while(num1!=p1->num1 && p1->next!=NULL) p2=p1;
22、 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()//課程管理主函數 struct couse * incouse; int i,num1; printf("\t\
23、t\t課程管理\n"); printf("1.新增課程\n"); printf("2.刪除課程\n"); printf("3.返回主菜單\n"); printf("請選擇(1~3):\n"); scanf("%d",&i); switch(i) case(1): incouse=(struct couse *)malloc(sizeof(struct couse)); printf("課程編號 課程名稱 課程性質 總學時 授課學時 實驗學時 學分 開課學期 人數上限\n");
24、 scanf("%d\n%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n",&incouse->num1,&incouse->name1,&incouse->xinzhi,&incouse->ztime,&incouse->stime,&incouse->score,&incouse->date,&incouse->Melepeo); incouse->nelepeo=0; insertc(incouse); break; case(2):
25、printf("請輸入要刪除課程的編號:\n"); scanf("%d",&num1); delc(num1); break; case(3):break; void keyboards()//錄入學生信息子函數(從鍵盤錄入) int i; struct student *p1,*p2; N2=0; p1=p2=(struct student *)malloc(sizeof(struct student)); printf("學生學號\t學生姓名\n");
26、 scanf("%d%s",&p1->num2,p1->name2); p1->nelen=0; for(i=0;i<20;i++) p1->nelenum[i]=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));
27、scanf("%d%s",&p1->num2,p1->name2); p1->nelen=0; for(i=0;i<20;i++) p1->nelenum[i]=0; p2->next=NULL; void files()//錄入學生信息子函數(從文件錄入) int i=0; FILE * fp; char filepath[20]; struct student *p1,*p2; N2=0; printf("輸入要讀入的文件路徑:"); getchar(); ge
28、ts(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;
29、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()//錄入學生信息主函數 int i; printf("\t\t\t錄入學生信息\n"); printf("\n1.從鍵盤錄入\n"); print
30、f("2.從文件錄入\n"); printf("3.返回主菜單\n"); printf("請選擇(1~3):\n"); scanf("%d",&i); switch(i) case(1):keyboards();break; case(2):files();break; case(3):break; void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息) struct student *p0,*p1,*p2; p1=head2; p0
31、=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 <= p1->num2) if(head2==p1) head2=p0; else p2->next=p0;
32、 p0->next=p1; else p1->next=p0; p0->next=NULL; N2=N2+1; void dels(int num2)//學生信息管理子函數(刪除學生信息) struct student *p1,*p2; if(head2==NULL) printf("\n沒有該學生信息,無法刪除!\n"); goto end; p1=head2; while(num2!=p1->num2 && p1->next!=N
33、ULL) p2=p1; p1=p1->next; if(num2==p1->num2) if(p1==head2) head2=p1->next; else p2->next=p1->next; printf("已刪除該學生信息!\n"); N2=N2-1; else printf("無該學號的學生!\n"); end:; void managements()//學生信息管理主函數 struct student * incouse; i
34、nt i,num2; printf("\t\t\t學生信息管理\n"); printf("1.新增學生信息\n"); printf("2.刪除學生信息\n"); printf("3.返回主菜單\n"); printf("請選擇(1~3):\n"); scanf("%d",&i); switch(i) case(1): incouse=(struct student *)malloc(sizeof(struct student)); incouse->nelen=0
35、; incouse->nelenum[0]=0; printf("學生學號\t學生姓名\n"); scanf("%d%s",&incouse->num2,incouse->name2); inserts(incouse); break; case(2): printf("請輸入要刪除學生的學號:\n"); scanf("%d",&num2); dels(num2);
36、 break; case(3):break; void elect(struct student * s)//選課 struct couse * p; int num1,i; printf("請輸入要選課的編號:\n"); scanf("%d",&num1); for(i=0;s->nelenum[i]!=0;i++); s->nelenum[i]=num1; (s->nelen)++; p=head1; while(p->num1!=num1) p=p->next; (
37、p->nelepeo)++; void cheak()//學生選課子函數(查詢可選課程) char e; struct couse * c; struct student * s; int num2,i,j=0,t=0; printf("請輸入你的學號:"); scanf("%d",&num2); s=head2; while(s->num2!=num2 && s->next!=NULL) s=s->next; if(s->num2!=num2) printf("不存在你的信息,請進入
38、主菜單錄入你的信息!\n"); goto end; c=head1; printf("你的可選課程編號:\n"); while(c!=NULL) for(t=0,i=0;s->nelenum[i]!=0;i++) if(c->num1==s->nelenum[i]) t=1; if(t==0 && (c->nelepeo!=c->Melepeo)) printf("%d\n",c->num1); j++; c=c->
39、next; if(j==0) printf("你已選完所有課程,無法再多選!\n"); goto 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
40、 * 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->nelenum[i]!=num1;i++); for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1]; p->nelenum[--j]=0; (p
41、1->nelepeo)--; printf("退課成功!\n"); void hcheak()//學生選課子函數(查詢已選課程) char c; struct couse * p0; struct student * p; int num2,i,f=0; printf("請輸入學號:\n"); scanf("%d",&num2); p=head2; while(p->num2!=num2 && p!=NULL) p=p->next; if(p==NULL) printf("不
42、存在你的信息,請回主菜單錄入信息:\n"); goto end; printf("已選課程編號:\n"); if(p->nelenum[0]==0) printf("你還沒選課!\n"); goto end; for(i=0;p->nelenum[i]!=0;i++) printf("%d\n",p->nelenum[i]); p0=head1; while(p0->num1!=p->nelenum[i]) p0=p0->next; f=
43、f+p0->score; printf("總學分:%d\n",f); printf("是否進行退課(y/n)?"); getchar(); c=getchar(); while(c=='y') back(p); printf("繼續(xù)退課(y/n)?"); getchar(); c=getchar(); (p->nelen)--; end:; void elective()//學生選課主函數 int i; printf("\t
44、\t\t學生選課\n"); printf("1.查詢可選課程\n"); printf("2.查詢已選課程\n"); printf("3.返回主菜單\n"); printf("請輸入(1~3):\n"); scanf("%d",&i); switch(i) case(1):cheak();break; case(2):hcheak();break; case(3):break; void listc()//輸出課程信息 struct couse * p; p=head1; p
45、rintf("課程編號 名稱 性質 總學時 授課學時 實驗學時 學分 開課學期 已選人數 人數上限\n"); while(p!=NULL) printf("%d %s %s %d %d %d %d %d %d %d\n",p->num1,p->name1,p->xinzhi,p->ztime,p->stime,p->shiyan,p->score,p->date,p->nelepeo,p->Melepeo); p=p->next; void lists()//輸出學生信息 struct student * p; p=head
46、2; printf("學生學號 學生姓名 已選課程數量\n"); while(p!=NULL) printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen); p=p->next; void intoc()//存儲課程信息 FILE * fp; struct couse * p; char filepath[30]; printf("輸入課程信息要保存的文件路徑:"); getchar(); gets(filepath);
47、 if((fp=fopen(filepath,"w"))==NULL) printf("\n保存失敗!"); exit(0); p=head1; while(p!=NULL) fprintf(fp,"%d %s %s %d %d %d %d %d %d %d\n",p->num1,p->name1,p->xinzhi,p->ztime,p->stime,p->shiyan,p->score,p->date,p->nelepeo,p->Melepeo); p=p->next;
48、fclose(fp); printf("課程信息已保存在%s中!\n",filepath); void intos()//存儲學生信息 FILE * fp; struct student * p; char filepath[30]; printf("輸入學生信息要保存的文件路徑:"); getchar(); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) printf("\n保存失敗!"); exit(
49、0); p=head2; while(p!=NULL) fwrite(p,sizeof(struct student),1,fp); p=p->next; fclose(fp); printf("學生信息已保存在%s中!\n",filepath); void into()//存儲信息 int i; printf("1.存儲課程信息\n"); printf("2.存儲學生信息\n"); printf("3.返回主菜單\n"); printf("請輸入(1~3)\n
50、"); scanf("%d",&i); switch(i) case(1):intoc();break; case(2):intos();break; case(3):break; void store()//信息主函數 int i; printf("\t\t系統信息查看及存儲\n"); printf("1.查看課程信息\n"); printf("2.查看學生信息\n"); printf("3.存儲信息\n"); printf("4.返回主菜單\n"); printf("請
51、輸入(1~4):\n"); scanf("%d",&i); switch(i) case(1):listc();break; case(2):lists();break; case(3):into();break; case(4):break; int main()//主函數 int i; start: printf("\n\t\t\t歡迎使用學生選課系統!\n"); printf("菜單:\n"); printf("1.錄入課程信息\n"); printf("2.課程管理
52、\n"); printf("3.錄入學生信息\n"); printf("4.學生信息管理\n"); printf("5.學生選課\n"); printf("6.系統信息查看及存儲\n"); printf("7.退出系統\n"); printf("\n請輸入菜單選項(1~7):\n"); scanf("%d",&i); if(i<1 || i>7) printf("輸入錯誤,請重輸:\n"); goto start; switch(i) case(1):
53、 system("cls"); inputc(); goto start; break; case(2): system("cls"); managementc(); goto start; break; case(3): system("cls"); inputs(); goto start;
54、 break; case(4): system("cls"); managements(); goto start; break; case(5): system("cls"); elective(); goto start; break; case(6): system("cls"); store(); goto start; break; case(7): system("cls"); printf("感謝使用本系統!\n\n再見!\n"); return(0);
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險源安全管理制度
- 安全培訓資料:典型建筑火災的防治基本原則與救援技術
- 企業(yè)雙重預防體系應知應會知識問答
- 8 各種煤礦安全考試試題
- 9 危險化學品經營單位安全生產管理人員模擬考試題庫試卷附答案
- 加壓過濾機司機技術操作規(guī)程
- 樹脂砂混砂工藝知識總結
- XXXXX現場安全應急處置預案
- 某公司消防安全檢查制度總結
- 1 煤礦安全檢查工(中級)職業(yè)技能理論知識考核試題含答案
- 4.燃氣安全生產企業(yè)主要負責人模擬考試題庫試卷含答案
- 工段(班組)級安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫試卷含答案-4
- 建筑起重司索信號工安全操作要點
- 實驗室計量常見的30個問問答題含解析