學(xué)生選修課程系統(tǒng)設(shè)計-C語言課程設(shè)計_第1頁
學(xué)生選修課程系統(tǒng)設(shè)計-C語言課程設(shè)計_第2頁
學(xué)生選修課程系統(tǒng)設(shè)計-C語言課程設(shè)計_第3頁
學(xué)生選修課程系統(tǒng)設(shè)計-C語言課程設(shè)計_第4頁
學(xué)生選修課程系統(tǒng)設(shè)計-C語言課程設(shè)計_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

如有幫助,歡迎下載。學(xué)生選修課系統(tǒng)設(shè)計一、設(shè)計目的當(dāng)今時代是飛速發(fā)展的信息時代,在各行各業(yè)中離不開信息處理,這正是計算機被廣泛應(yīng)用于信息系統(tǒng)的環(huán)境。計算機的最到好處的于利用它能夠進行信息管理,使用計算機進行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。尤其對于復(fù)雜的信息管理,計算機能夠充分發(fā)揮它的優(yōu)越性。計算機進行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。本系統(tǒng)就是為了管理好學(xué)生選課信息而設(shè)計的。數(shù)據(jù)處理手工操作,工作量大,出錯率高,出錯后不易更改,造成了時間上的浪費?;谶@個問題,我認(rèn)為有必要建立一個學(xué)生選課系統(tǒng),使學(xué)生選課信息管理工作規(guī)范化、系統(tǒng)化、程序化,避免學(xué)生選課管理的隨意性,提高信息處理的速度和準(zhǔn)確性,能夠及時、準(zhǔn)確、有效的查詢和修改選課情況。二、題目說明假定有n門課程,每門課程都有課程編號,課程名稱,課程性質(zhì),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,學(xué)生可按要求 (如總學(xué)分不得少于60)自由選課。試設(shè)計一選修課程系統(tǒng),使之能提供一下功能:系統(tǒng)以菜單方式工作;課程信息和學(xué)生信息的錄入功能(課程信息有文件保存)----輸入;課程信息瀏覽功能----輸出;查詢功能(至少一種查詢方式)---算法;按學(xué)分查詢;某門課程學(xué)生選修情況(可選項)。[提示]數(shù)據(jù)結(jié)構(gòu)可用結(jié)構(gòu)體,包括課程和選秀兩個結(jié)構(gòu)體,其中課程結(jié)構(gòu)體包括課程編號、課程名稱、課程性質(zhì)、總學(xué)時、授課學(xué)時、實驗或上機學(xué)時、學(xué)分、開課學(xué)期。選修結(jié)構(gòu)體成員包括學(xué)號,課程編號,該結(jié)構(gòu)體的建立主要是為了查詢某門課程學(xué)生選修情況.。三、數(shù)據(jù)結(jié)構(gòu)設(shè)計0如有幫助,歡迎下載。本系統(tǒng)的實現(xiàn),全部采用鏈表這種數(shù)據(jù)結(jié)構(gòu),用鏈表實現(xiàn)課程的查找、添加、刪除、課程的選修、追加選修的課程,課程信息采用結(jié)構(gòu)體這種數(shù)據(jù)結(jié)構(gòu)。typedefstructsubjects{intnum; //課程編號charname[20]; //課程名稱charkind[10]; //課程性質(zhì)intstime; //總學(xué)時intttime; //授課學(xué)時intetime; //實驗或上機學(xué)時intscore; //學(xué)分intterm; //開課學(xué)期structsubjects*next;}SUB;SUB*head=NULL;四、程序分析現(xiàn)代的社會是信息化的社會,信息無所不在。在生產(chǎn)領(lǐng)域、流通領(lǐng)域、各個部門每天都和信息打交道,如何處理如此多的信息成為了一個重要的課題。 學(xué)生在學(xué)期開始選課是教學(xué)活動中的一個重要環(huán)節(jié), 該環(huán)節(jié)如果能管理好,它不僅能加快學(xué)生的選課速度,也提高了整個活動的效率。大學(xué)一般都有上千名學(xué)生,每學(xué)期開始學(xué)生都要選課,因而產(chǎn)生了大量的課程信息。考慮到用戶使用的方便和處理的信息量系統(tǒng)要完成錄入,保存,查詢,修改和刪除課程信息的各種過程,能打印出課程信息表。對象:系統(tǒng)的主要使用對象是需要選課的學(xué)生。學(xué)生在選課是要察看各個課程的詳細信息,還要選擇一些感興趣的課程,需要生成課表,在發(fā)現(xiàn)課程有沖突后能夠修改先前選擇的信息。需要隨學(xué)生選課的變化,計算相應(yīng)的總學(xué)分。在全部選定后,打印報表。系統(tǒng)還需要管理員來查看和修改學(xué)生的總體選課情況課程信息和學(xué)生信息。五、程序設(shè)計大綱1如有幫助,歡迎下載。主模塊管理員模塊 學(xué)生模塊瀏查添刪瀏查選瀏刪覽詢擇覽除覽詢加除所課選我錯有程修選選課課課課課信課修的程息程的課程程程程課程程2如有幫助,歡迎下載。六、模塊設(shè)計(一)主函數(shù),頭文件及結(jié)構(gòu)體聲明主函數(shù)設(shè)計地比較簡潔,只是提供一個主菜單,switch語句將整個程序分為兩個大的功能模塊:進入選課系統(tǒng)選擇序號進行選課進入下一層[程序]#include"stdio.h"#include"string.h"#include"stdlib.h"#include"malloc.h"voidprin1();voidchoose();typedefstructsubjects //課程結(jié)構(gòu)體{intnum; //課程編號charname[20]; //課程名稱charkind[10]; //課程性質(zhì)intstime; //總學(xué)時intttime; //授課學(xué)時intetime; //實驗或上機學(xué)時intscore; //學(xué)分intterm; //開課學(xué)期structsubjects*next;}SUB;SUB*head=NULL;int main(){intn,w=1;do{system("cls");puts("\n\n\t\t*****************MENU******************\n\n");3如有幫助,歡迎下載。puts("\t\t\t\t1.以管理員身份登錄\n");puts("\t\t\t\t2.以學(xué)生身份登錄\n");puts("\t\t\t\t3.退出");puts("\n\n\t\t*******************************************\n");printf("Chioseyournumber(1-3):[]\b\b");scanf("%d",&n);switch(n){case1:Mangers();break;case2:Students();break;case3:w=0;break;default:;}}while(w==1);return0;}(二)管理員功能模塊管理員的功能一共有四個功能:瀏覽,查詢,添加,刪除課程,運用字符串處理函數(shù)處理密碼的問題,用一個 switch語句實現(xiàn)函數(shù)的調(diào)用:管理員登錄菜單i=3是 否i>0輸入密碼是 否進行碼匹對驗證進入管理員界面

按任意鍵退出4如有幫助,歡迎下載。[程序]voidMangers(){intn,w=1,flag=0,i=3;chars[8];charpassword[7]="1";do{printf("\n\nEnterpassword:");scanf("%s",s);if(!strcmp(s,password)) //進行密碼匹配驗證{flag=1;break;}else{printf("\n\nError!Youonlyhave%dtimes!Enteragain:\n",i-1);i--;}}while(i>0);if(!flag){printf("youhaveEnter3times!"); //輸入密碼超過了 3次??!exit(0); //自動退出}do{system("cls");puts("\n\n\t\t********************* 管 理 員 菜 單***********************\n\n");puts("\t\t\t\t1---瀏覽課程\n");puts("\t\t\t\t2---查詢課程\n");puts("\t\t\t\t3---添加課程\n");puts("\t\t\t\t4---刪除課程\n");puts("\t\t\t\t5---返回主菜單");puts("\n\n\t\t******************************************************\n");printf("Chioseyournumber(1-5):[]\b\b");scanf("%d",&n);switch(n){5如有幫助,歡迎下載。case1:prin();break;case2:search();break;case3:insert();savefile();break;case4:del();savefile();break;case5:return;default:;}}while(w==1);}voidStudents(){intn,w=1;do{system("cls");puts("\n\n\t\t********************* 學(xué) 生 菜 單***********************\n\n");puts("\t\t\t\t1---瀏覽所有課程\n");puts("\t\t\t\t2---查詢課程信息\n");puts("\t\t\t\t3---選擇選修課程\n");puts("\t\t\t\t4---瀏覽我選修的課程\n");puts("\t\t\t\t5---刪除錯選課程\n");puts("\t\t\t\t6---返回主菜單");puts("\n\n\t\t****************************************************\n");printf("Chioseyournumber(1-6):[]\b\b");scanf("%d",&n);switch(n){case1:prin();break;case2:search();break;case3:choose();break;case4:prin1();break;case5:del();savefile1();break;case6:return;default:;}}while(w==1);}(三)學(xué)生功能菜單6如有幫助,歡迎下載。學(xué)生功能菜單包括六個功能:瀏覽課程,查詢課程,選修課程,瀏覽我所選修的課程,添加選修課程,刪除錯選的課程,也是用到switch語句來調(diào)用函數(shù):學(xué)生登錄菜單按1-6數(shù)字鍵進入各選項1、瀏覽所有課程2、查詢課程信息3、選擇選修課程4、瀏覽我選修的課程5、刪除錯選課程6、返回主菜單進入所選目標(biāo)[程序]voidStudents() //學(xué)生登錄菜單{intn,w=1;do{system("cls");puts("\n\n\t\t************ 學(xué)生菜單**************\n\n");puts("\t\t\t\t1---瀏覽所有課程\n");puts("\t\t\t\t2---查詢課程信息\n");puts("\t\t\t\t3---選擇選修課程\n");puts("\t\t\t\t4---瀏覽我選修的課程\n");puts("\t\t\t\t5---刪除錯選課程\n");puts("\t\t\t\t6---返回主菜單");puts("\n\n\t\t***********************************\n");printf("Chioseyournumber(1-6):[]\b\b");scanf("%d",&n);7如有幫助,歡迎下載。switch(n){case1:prin();break;case2:search();break;case3:choose();break;case4:prin1();break;case5:del();savefile1();break;case6:return;default:;}}while(w==1);}(四)創(chuàng)建鏈表模塊8如有幫助,歡迎下載。創(chuàng)建鏈表輸入選修課程信息(num,name,kind,stime,ttime,etime,score,term)是 否Num!=0p=(SUB*)malloc(size);p->num=num;strcpy(p->name,name);strcpy(p->kind,kind);p->stime=stime;p->ttime=ttime;p->etime=etime;p->score=score;p->term=term;否 是Head==NULLTail->next=p;Tail=p;Head=pnum,name,kind,Tail->next=NULL;創(chuàng)建完成Scanf(Returnhead;&stime,&ttime,&etim9如有幫助,歡迎下載。[程序]SUB*create_form() //創(chuàng)建鏈表{SUB*head,*tail,*p;intnum,stime,ttime;intetime,score,term;charname[20],kind[10];intsize=sizeof(SUB);head=tail=NULL;printf("輸入選修課程信息:\n");scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term);while(num!=0){p=(SUB*)malloc(size);p->num=num;strcpy(p->name,name);strcpy(p->kind,kind);p->stime=stime;p->ttime=ttime;p->etime=etime;p->score=score;p->term=term;if(head==NULL)head=p;elsetail->next=p;tail=p;scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term);}tail->next=NULL;returnhead;}10如有幫助,歡迎下載。瀏覽所有課程SUB*ptr;head=NULL;readfile();是 否Head==NULLPrintf(NORECORDS);Return;輸出課程信息(五)瀏覽模塊瀏覽模塊主要用管理員中的 “瀏覽課程”和學(xué)生功能中的 “瀏覽所有所有課程”,將所有的課程信息輸出,即將 all_sub.txt文件里面的內(nèi)容全部輸出:11如有幫助,歡迎下載。[程序]voidprin() //瀏覽所有課程{SUB*ptr;head=NULL;readfile();if(head==NULL){printf("\n\n\t*********NORECORDS!************\n");return;}printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");for(ptr=head;ptr;ptr=ptr->next){printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);}system("pause");}voidprin1() //瀏覽所有已選修課程{SUB*ptr;FILE*fp;if((fp=fopen("3.txt","r"))==NULL){printf("Cannotopenfile.\n");choose();}printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");while(!feof(fp)){ptr=(SUB*)malloc(sizeof(SUB));fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,&ptr->stime,&ptr->ttime,&ptr->etime,&ptr->score,&ptr->term);printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);}12如有幫助,歡迎下載。system("pause");}(六)查詢模塊查詢模塊主要用于管理員功能中的“查詢課程”和學(xué)生功能模塊中的“查詢所有課程”,查詢模塊共分為三個查詢方法:按課程名稱查找,按課程性質(zhì)查找和按學(xué)分查找switch語句中,每一個case語句就是一中查詢方法:課程信息查詢按1-4數(shù)字鍵進入各選項1、按課程名稱查找2、按課程性質(zhì)查找3、按學(xué)分查找4、退出查找進入所選目[程序]voidsearch() //課程信息查詢{inta,num;intt=1;chartype[10],min[10];SUB*ptr;L1:system("cls");printf("\n\n\t\t********** 請選擇查詢方式*************\n");printf("\n\t\t\t1---按課程名稱查找\n");printf("\n\t\t\t2---按課程性質(zhì)查找\n");printf("\n\t\t\t3---按學(xué)分查找\n");printf("\n\t\t\t4---退出查找\n");printf("\n\n\t\t**************************************\n");printf("\n\nChioseyournumber(1-4):[]\b\b");13如有幫助,歡迎下載。scanf("%d",&a);switch(a){case1:printf("請輸入要查找的課程的名稱 :");scanf("%s",min);printf("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n");for(ptr=head;ptr;ptr=ptr->next)if(strcmp(min,ptr->name)==0){printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);t=0;}if(t)printf("\t\n未找到!\n");t=1;system("pause");gotoL1;case2:printf("請輸入要查找的課程的性質(zhì) :");scanf("%s",type);printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");for(ptr=head;ptr;ptr=ptr->next)if(strcmp(type,ptr->kind)==0){printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);t=0;}if(t)printf("\t\n未找到!\n");t=1;system("pause");gotoL1;case3:printf("輸入要查找的課程的學(xué)分 :");scanf("%d",&num);printf("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n");for(ptr=head;ptr;ptr=ptr->next)14如有幫助,歡迎下載。if(ptr->score==num){printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);t=0;}if(t)printf("\n\t未找到!\n");t=1;system("pause");gotoL1;case4:break;}}t=0;}if(t)printf("\n\t未找到!\n");t=1;system("pause");gotoL1;case4:break; //退出查找}}(七)插入鏈表模塊插入鏈表操作主要用于添加課程,在整個課程信息中加入一些新課程,它在添加模塊中被調(diào)用:15如有幫助,歡迎下載。插入鏈表模塊SUB*p1,*p2;p1=subj;是 否head==NULL是否head=p1;head->next=NULL; p2=head;p2;是 否p2->next==NULLp2->next=subj;eturnhead;subj->next=NULL;break;[程序]void*myInsert(SUB*subj) //鏈表插入操作{SUB*ptr,*ptr2;ptr=subj;if(head==NULL){head=ptr;head->next=NULL;}else{for(ptr2=head;ptr2;ptr2=ptr2->next)16如有幫助,歡迎下載。if(ptr2->next==NULL){ptr2->next=subj;插入課程信息SUB*ptr,*subj;intsize=sizeof(SUB);charch,ch1;是 否ch!='0'輸入(課程信息、課程編號、課程名稱、課程性質(zhì)、總學(xué)分、授課學(xué)分、實踐或上機學(xué)時)myInsert(subj);printf("\n\n 繼續(xù)插入請按回車 C語言課程設(shè)計報告ch1=getchar();ch=getchar();subj->next=NULL;break;}}returnhead;}(八)添加模塊添加模塊主要用于增加課程信息 ,采用鏈表的操作:

Returnhead;17如有幫助,歡迎下載。[程序]void*insert() //插入課程信息{SUB*ptr,*subj;intsize=sizeof(SUB);charch,ch1;while(ch!='0'){subj=(SUB*)malloc(size);ptr=subj;printf("輸入要插入的課程信息:\n");printf("\n\t\t請輸入課程編號:");scanf("%d",&subj->num);printf("\n\t\t請輸入課程名稱:");scanf("%s",&subj->name);printf("\n\t\t請輸入課程性質(zhì):");scanf("%s",&subj->kind);printf("\n\t\t請輸入總學(xué)時:");scanf("%d",&subj->stime);printf("\n\t\t請輸入授課學(xué)時:");scanf("%d",&subj->ttime);printf("\n\t\t請輸入實踐或上機學(xué)時:");scanf("%d",&subj->etime);printf("\n\t\t請輸入學(xué)分:");scanf("%d",&subj->score);printf("\n\t\t請輸入開課學(xué)期:");scanf("%d",&subj->term);myInsert(subj);printf("\n\n繼續(xù)插入請按回車\n");printf("\n結(jié)束添加課程按 0:[]\b\b");ch1=getchar(); /*將回車鍵賦給 CH1,否則subj->term輸完后輸入的回車鍵會賦給 CH,因此用CH1填補。*/ch=getchar();}returnhead;}(九)刪除模塊刪除模塊主要用于管理員刪除課程信息學(xué)生刪除自己的選課 ,全部采用刪除鏈表中的某一個節(jié)點的操作:18如有幫助,歡迎下載。刪除選修課程SUB*p1,*p2;charch,ch1;intnumprintf( 輸入想要刪除的課程編號 );scanf("%d",&num);進行編號查找并刪除printf("\n 繼續(xù)刪除請按回車\n");printf("\n 結(jié)束刪除課程按 0:");19如有幫助,歡迎下載。[程序]void*del() //刪除課程-{SUB*p1,*p2;charch,ch1;intnum;while(ch!='0'){printf("輸入想要刪除的課程編號:[]\b\b\b\b\b");scanf("%d",&num);if(head->num==num){p2=head;head=head->next;free(p2);}if(head==NULL)returnNULL;p1=head;p2=head->next;while(p2){if(p2->num==num){p1->next=p2->next;free(p2);}elsep1=p2;p2=p1->next;}printf("\n繼續(xù)刪除請按回車\n");printf("\n結(jié)束刪除課程按 0:[]\b\b");ch1=getchar(); //將回車鍵賦給 CH1,否則num輸完后再輸入的回車鍵會賦給 CH,因此用CH1填補。ch=getchar();}returnhead;system("pause");}20如有幫助,歡迎下載。(十)選修課程模塊選修課程模塊采用插入鏈表的操作:選新課程printf(" 輸入要選修的課程的編號\n");printf("如果確認(rèn)輸入完要選修的課程的編號,請輸入 0");程序?qū)斎氲男畔⑦M行查找判斷printf( “選修成功!\n")printf("\n 以上信息全部保存在'my_sub.txt' 中\(zhòng)n")[程序]voidchoose() //選新課程{SUB*p,*q;inta[5];intnum,total=0,i=0,j;21如有幫助,歡迎下載。printf("輸入要選修的課程的編號,編號之間以空格分開\n");scanf("%d",&num);printf("如果確認(rèn)輸入完要選修的課程的編號,請輸入 0:[]\b\b");while(num!=0){for(p=head;p;p=p->next)if(p->num==num){total=total+p->score;a[i]=num;i++;}scanf("%d",&num);}if(total<60){printf("選修總學(xué)分為%d,未達到60,選修失敗!\n",total);system("pause");}else{IntFILE,fp;FILE*fp;fp=fopen("my_sub.txt","w");for(j=0;j<i;j++)for(q=head;q;q=q->next)if(q->num==a[j])fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term);fclose(fp);printf("\t\t\n***** 選修成功!****\n");printf("\n您選修的課程總學(xué)分為%d,課程分別為:\n",total);printf("\n課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n");for(j=0;j<i;j++)for(q=head;q;q=q->next)if(q->num==a[j])printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term);printf("\n以上信息全部保存在'my_sub.txt'中\(zhòng)n");}system("pause");}22如有幫助,歡迎下載。(十一)讀取文件模塊讀取文件模塊是用來讀出文件內(nèi)容,并將內(nèi)容輸出到內(nèi)存中,當(dāng)輸入文件名時,就能打開指定的文件,當(dāng)輸入all_sub.txt時,打開所有課程信息的文件,當(dāng)輸入my_sub.txt時,就是瀏覽學(xué)生選修的課程信息。讀取文件printf(" 請輸入課程信息所在的文件名稱:");!feof(fp)c=fgetc(fp))=='\n'!feof(fp)newSub=(SUB*)malloc(sizeof(SUB));fscanf(fp,&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);myInsert(newSub);fclose(fp);[程序]voidreadfile() //閱讀文件{void*myInsert(SUB*);SUB*newSub; //新課程intnum,stime,ttime,etime;intscore,term;23如有幫助,歡迎下載。charc,name[20],kind[10],fname[20];FILE*fp;fp=fopen("2.txt","r");while(!feof(fp)){newSub=(SUB*)malloc(sizeof(SUB));fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);myInsert(newSub);}fclose(fp);}(十二)保存文件模塊保存文件模塊共分為兩個子程序,分別是將修改的信息保存到 all_sub.txt和my_sub.txt文件中:[程序voidsavefile() //保存文件{SUB*p;FILE*fp;fp=fopen("2.txt","w");if(fp==NULL)exit(0);printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實驗或上機學(xué)時學(xué)分開課學(xué)期\n");for(p=head;p;p=p->next)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("創(chuàng)建后的信息已放入'2.txt'文件中\(zhòng)n");system("pause");voidsavefile1() //保存文件{SUB*p;FILE*fp;fp=fopen("3.txt","w");if(fp==NULL)exit(0);for(p=head;p;p=p->next)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("創(chuàng)建后的信息已放入'3.txt'文件中\(zhòng)n");system("pause");}保存文件24系統(tǒng)進行檢測所要保存的文件如有幫助,歡迎下載。七、上機操作25如有幫助,歡迎下載。開始運行管理員界面26如有幫助,歡迎下載。課程輸入模塊管理員瀏覽模塊27如有幫助,歡迎下載。管理員課程查詢模塊管理員添加模塊28如有幫助,歡迎下載。管理員刪除模塊學(xué)生界面29如有幫助,歡迎下載。選課模塊學(xué)生瀏覽模塊30如有幫助,歡迎下載。學(xué)生查詢模塊學(xué)生刪除模塊八、結(jié)果分析程序的優(yōu)缺點【功能上的優(yōu)點】主要體現(xiàn)在以下三點:31如有幫助,歡迎下載。1.簡潔明了的程序菜單。程序主要采用了六組層次不同的菜單,相互獨立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。2.人性化的程序提示語言,程序提示語言較人性化,不僅大多為祈使語句、疑問句,而且提示明確,具有較強的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地進行程序的操作。3.智能化的模塊設(shè)計。程序的智能化主要體現(xiàn)在減少了許多人工操作。如功能模塊操作結(jié)束后,均會返回主菜單進行下一模板的運行, 并提示是否再進行類似的操作,這樣給用戶帶來了操作的方便,大大提高了學(xué)生選課的效率。本程序達到了C語言課程設(shè)計題目的所有要求。即本程序(1)系統(tǒng)一菜單方式工作(2)課程信息和學(xué)生選課信息錄入功能(課程信息用文件保存輸入3)課程信息瀏覽功能——輸出(4)查詢功能(至少一種查詢方式)——算法5)按學(xué)分查詢(6)某門課程學(xué)生選修情況(可選項)的功能要求。與此同時,程序各模塊開發(fā)設(shè)計依據(jù)了程序的具體實際的使用情景,而有所改進,使其更具有實用性?!境绦虻娜秉c】主要表現(xiàn)在以下四點:1.程序雖然經(jīng)過多次精簡,但僅僅是形式上、小范圍的精簡,仍未得到本質(zhì)上的精簡,即未找到更加簡單、更加高效、更加合理、更小占用的資源的算法。2.程序仍然存在不合理的地方,例如程序某些部分輸入錯誤會導(dǎo)致程序中止或轉(zhuǎn)向其他功能模塊,即程序建議用戶注意提示,進行合理的準(zhǔn)確的輸入,這樣更有利于管理工作。3.程序功能仍然不夠完善。例如信息表達方式不豐富,比較單一,缺少圖片、音樂等元化表達方式。32如有幫助,歡迎下載。附錄(源程序代碼)#include"stdio.h"#include"string.h"#include"stdlib.h"#include"malloc.h"voidprin1();voidchoose();typedefstructsubjects{intnum; //課程編號charname[20]; //課程名稱charkind[10]; //課程性質(zhì)intstime; //總學(xué)時intttime; //授課學(xué)時intetime; //實驗或上機學(xué)時intscore; //學(xué)分intterm; //開課學(xué)期structsubjects*next;}SUB;SUB*head=NULL;SUB*create_form() //創(chuàng)建鏈表{SUB*head,*tail,*p;intnum,stime,ttime;intetime,score,term;charname[20],kind[10];intsize=sizeof(SUB);head=tail=NULL;printf("輸入選修課程信息:\n");scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,33如有幫助,歡迎下載。&term);while(num!=0){p=(SUB*)malloc(size);p->num=num;strcpy(p->name,name);strcpy(p->kind,kind);p->stime=stime;p->ttime=ttime;p->etime=etime;p->score=score;p->term=term;if(head==NULL)head=p;elsetail->next=p;tail=p;scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term);}tail->next=NULL;returnhead;}voidsavefile() //保存文件{SUB*p;FILE*fp;fp=fopen("2.txt","w");if(fp==NULL)exit(0);34如有幫助,歡迎下載。printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實驗或上機學(xué)時學(xué)分開課學(xué)期\n");for(p=head;p;p=p->next)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("創(chuàng)建后的信息已放入'2.txt'文件中\(zhòng)n");system("pause");}voidsavefile1() //保存文件{SUB*p;FILE*fp;fp=fopen("3.txt","w");if(fp==NULL)exit(0);for(p=head;p;p=p->next)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("創(chuàng)建后的信息已放入'3.txt'文件中\(zhòng)n");system("pause");}voidreadfile() //閱讀文件{void*myInsert(SUB*);SUB*newSub; //新課程intnum,stime,ttime,etime;35如有幫助,歡迎下載。intscore,term;charc,name[20],kind[10],fname[20];FILE*fp;fp=fopen("2.txt","r");while(!feof(fp)){newSub=(SUB*)malloc(sizeof(SUB));fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);myInsert(newSub);}fclose(fp);}voidprin() //瀏覽所有課程{SUB*ptr;head=NULL;readfile();if(head==NULL){printf("\n\n\t*********NORECORDS!************\n");return;}printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");for(ptr=head;ptr;ptr=ptr->next){printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,36如有幫助,歡迎下載。ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);}system("pause");}voidprin1() //瀏覽所有選修課程{SUB*ptr;FILE*fp;if((fp=fopen("3.txt","r"))==NULL){printf("Cannotopenfile.\n");choose();}printf("課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");while(!feof(fp)){ptr=(SUB*)malloc(sizeof(SUB));fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,&ptr->stime,&ptr->ttime,&ptr->etime,&ptr->score,&ptr->term);printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);}system("pause");}void*myInsert(SUB*subj) //鏈表插入操作{SUB*ptr,*ptr2;ptr=subj;37如有幫助,歡迎下載。if(head==NULL){head=ptr;head->next=NULL;}else{for(ptr2=head;ptr2;ptr2=ptr2->next)if(ptr2->next==NULL){ptr2->next=subj;subj->next=NULL;break;}}returnhead;}void*insert()//插入課程信息{SUB*ptr,*subj;intsize=sizeof(SUB);charch,ch1;while(ch!='0'){subj=(SUB*)malloc(size);ptr=subj;printf("輸入要插入的課程信息:\n");printf("\n\t\t請輸入課程編號:");scanf("%d",&subj->num);printf("\n\t\t請輸入課程名稱:");scanf("%s",&subj->name);printf("\n\t\t請輸入課程性質(zhì):");scanf("%s",&subj->kind);printf("\n\t\t請輸入總學(xué)時:");scanf("%d",&subj->stime);38如有幫助,歡迎下載。printf("\n\t\t請輸入授課學(xué)時:");scanf("%d",&subj->ttime);printf("\n\t\t 請 輸 入 實 踐 或 上 機 學(xué)時:");scanf("%d",&subj->etime);printf("\n\t\t請輸入學(xué)分:");scanf("%d",&subj->score);printf("\n\t\t請輸入開課學(xué)期:");scanf("%d",&subj->term);myInsert(subj);printf("\n添加完畢,新信息存入文件中\(zhòng)n");printf("\n繼續(xù)插入請按回車\n");printf("\n結(jié)束添加課程按 0:[]\b\b");ch1=getchar(); //將回車鍵賦給 CH1,否則subj->term輸完后輸入的回車鍵會賦給 CH,因此用CH1填補。ch=getchar();}returnhead;}void*del() //刪除課程{SUB*p1,*p2;charch,ch1;intnum;while(ch!='0'){printf("輸入想要刪除的課程編號 :[ ]\b\b\b\b\b");scanf("%d",&num);if(head->num==num){p2=head;head=head->next;free(p2);}39如有幫助,歡迎下載。if(head==NULL)returnNULL;p1=head;p2=head->next;while(p2){if(p2->num==num){p1->next=p2->next;free(p2);}elsep1=p2;p2=p1->next;}printf("\n繼續(xù)刪除請按回車\n");printf("\n結(jié)束刪除課程按 0:[]\b\b");ch1=getchar(); //將回車鍵賦給 CH1,否則num輸完后再輸入的回車鍵會賦給 CH,因此用CH1填補。ch=getchar();printf("\n刪除完畢,新信息存入文件中\(zhòng)n");system("pause");}returnhead;system("pause");}voidchoose()//選新課程--學(xué)生選課函數(shù){SUB*p,*q;inta[5];intnum,total=0,i=0,j;40如有幫助,歡迎下載。printf("輸入要選修的課程的編號 ,編號之間以空格分開\n");scanf("%d",&num);printf("如果確認(rèn)輸入完要選修的課程的編號 ,請輸入0:[]\b\b");while(num!=0){for(p=head;p;p=p->next)if(p->num==num){total=total+p->score;a[i]=num;i++;}scanf("%d",&num);}if(total<60){printf("選修總學(xué)分為%d,未達到60,選修失敗!\n",total);system("pause");}else{FILE*fp;fp=fopen("3.txt","w");//fprintf(fp,"課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");for(j=0;j<i;j++)for(q=head;q;q=q->next)if(q->num==a[j])fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term);fclose(fp);41如有幫助,歡迎下載。printf("\t\t\n***** 選修成功!****\n");printf("\n您選修的課程總學(xué)分為 %d,課程分別為:\n",total);printf("\n課程編號課程名稱課程性質(zhì)總學(xué)時授課學(xué)時實踐或上機學(xué)時學(xué)分開課學(xué)期\n");for(j=0;j<i;j++)for(q=head;q;q=q->next)if(q->num==a[j])printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term);printf("\n以上信息全部保存在'3.txt'中\(zhòng)n");}system("pause");}voidsearch() //課程信息查詢{inta,num;intt=1;chartype[10],min[10];SUB*ptr;L1:system("cls");printf("\n\n\t\t********** 請選擇查詢方式*************\n");printf("\n\t\t\t1---按課程名稱查找\n");printf("\n\t\t\t2---按課程性質(zhì)查找\n");printf("\n\t\t\t3---按學(xué)分查找\n");printf("\n\t\t\t4---退出查找\n");printf("\n\n\t\t**************************************\n");printf("\n\nChioseyournumber(1-4):[]\b\b");/r/

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論