版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計 計算機學院14060307班第67頁 共67頁 課程設計實驗報告課程管理系統(tǒng)計算機科學與工程學院14060307班董永博佳興晨光炳舒 靜目錄題目3分析過程與思路3算法5函數(shù)模塊介紹9源程序10運行結果36課程設計總結42題目課程管理系統(tǒng)分析過程與思路課程管理系統(tǒng)首先要能夠分別實現(xiàn)課程信息的增加、刪除、查詢、修改。為了增加程序的實用性,應當能夠?qū)⑤斎氲恼n程信息通過存文件的方式將課程信息存入硬盤。而使用系統(tǒng)的可能是學生和管理員兩類,因此要實現(xiàn)根據(jù)登錄類型來開放
2、應有的功能。由于課程信息包含很多成員,例如課程編碼、課程名等。因此應該用鏈表對信息進行記錄,由于不清楚課程總數(shù),因此需要用動態(tài)鏈表。動態(tài)鏈表的使用需要聲明合適的結構體,數(shù)據(jù)域中應包含課程所包含的各個成員、指針域用來指向下一個結點。動態(tài)鏈表的建立需要用到malloc函數(shù)。對已經(jīng)建立的鏈表需要存入文件,需要用到fwrite、fread、feof等文件處理函數(shù),保存文件要多次用到,因此應該獨立做一個函數(shù)。刪除函數(shù)要用到諸如free函數(shù),為了防止刪除的結點為首結點,刪除后找不到頭結點,因此刪除函數(shù)應該是一個指針函數(shù),用以返回刪除后的新的頭結點。登錄函數(shù)要返回一個值用以在其他函數(shù)中判斷登錄類型,以便針對
3、用戶開放相應的功能。課程管理系統(tǒng)課程管理系統(tǒng)登錄key學生登錄mainpage()管理員登陸mainpage()查詢serch()查詢serch()輸入inpt()添加add()刪除dele()修改alter()程序功能結構示意圖算法NNY21開始輸入登錄類型oO=?學生登錄管理員登錄mainpage()key函數(shù)簡單算法字符串相等11輸入mm=?serch()退出inpt()結束O=?mainpage函數(shù)算法簡單示意Save函數(shù)21!17&!2開辟新節(jié)點輸入新節(jié)點數(shù)據(jù)輸入zz=?inpt函數(shù)算法簡單示意開辟新節(jié)點結點相連YYNYNYNYserch函數(shù)查看方式n=0?打開文件文件為空開辟結點讀
4、取文件數(shù)據(jù)已讀完文件為空Mainpage函數(shù)輸出一個結點完畢?查詢方式結點遍歷查找輸出重新?操作?添加add修改alter刪除deleSerch函數(shù)算法簡單示意NNY輸入數(shù)據(jù)滿足條件異常處理示意pp1-前一結點p2-當前結點p1-next=p2刪除首結點head=p1-nextfree(p2)return(head)free(p1)刪除函數(shù)簡單示意函數(shù)模塊介紹void inpt();/輸入函數(shù):用以輸入一系列數(shù)據(jù),在文件中沒有課程信息數(shù)據(jù)或者需要全部更新時使用該函數(shù)模塊。void serch();/查詢函數(shù),用以查詢已經(jīng)存儲的課程信息。并通過調(diào)用其他函數(shù),來對課程信息進行一系列操作。void
5、alter(int all,int b,lesson *head);/修改函數(shù),用以小規(guī)模的修改已經(jīng)存儲的課程信息。lesson *dele(int all,int b,lesson *head);/刪除函數(shù),用以刪除一些已經(jīng)失效了的課程信息。通過返回新鏈表的頭指針,以便對新鏈表進行一系列操作。void save(int n,lesson *p);/保存函數(shù),用以將已經(jīng)建立的鏈表存入硬盤,便于隨時使用。void output(struct lesson *q2);/輸出函數(shù),用以將課程信息輸出到屏幕上顯示出來。void add(int all,lesson *head);/添加,用以在原課程信
6、息的基礎上添加新的課程信息。void mainpage();/主界面函數(shù)int key();/登錄函數(shù),通過返回值來判斷用戶類型,以開放不同的功能。源程序#include#include#include#define len sizeof(struct lesson)#define print printf(輸入數(shù)據(jù)有誤,請重新輸入!n);int n,temp,o;struct lessonchar num5;/課程編碼char proj10;/課程名char crdt4;/學分char hour3;/學時char term2;/學期char week5;/周次char date5;/周日期(
7、周幾)char period5;/節(jié)次char room6;/教室struct lesson *next;/結構體指針;void inpt();/輸入函數(shù)void serch();/查詢函數(shù)void alter(int all,int b,lesson *head);/修改函數(shù)lesson *dele(int all,int b,lesson *head);/刪除函數(shù)void save(int n,lesson *p);/保存函數(shù)void output(struct lesson *q2);/輸出函數(shù)void add(int all,lesson *head);/添加void mainpage
8、();/主界面函數(shù)int key();/登錄函數(shù)int main()田晨光o=key();/調(diào)用登錄函數(shù)mainpage();/調(diào)用主界面 return 0;void mainpage()/主界面函數(shù)永博int m=1;while(m=1)printf(*n);/ printf(* 輸入1增加課程 *n); printf(* 輸入2查詢課程 *n); printf(* 輸入3退出程序 *n); printf(*nn);doscanf(%d,&m);if(m3) print;/該循環(huán)體使用戶輸入選項代碼并判斷代碼是否合理while(m3); s
9、ystem(CLS);/清除屏幕內(nèi)容 switch(m)/通過switch語句轉(zhuǎn)向用戶選擇的功能函數(shù) case 1:inpt();break;/調(diào)用輸入函數(shù) case 2:serch();break;/調(diào)用查詢函數(shù) case 3:exit(0);break;/退出void inpt()/輸入函田晨光if(o=1)system(CLS);/清屏printf(沒有權限,請聯(lián)系管理員!n);mainpage();int k=1,z,x,i;struct lesson *head;/聲明一個lesson類型的結構體指針,作為頭指針。struct lesson *p1,*p2;
10、/聲明兩個lesson類型的結構體指針,建造鏈表。p1=p2=(struct lesson *)malloc(len);/使兩個結構體指針都指向第一個節(jié)點n=0;/n用來從零開始記錄當前為第幾節(jié)點 while(k=1)/循環(huán)輸入n=n+1;/循環(huán)體每執(zhí)行一次使n加1printf(請輸入課程編碼(1-4位字符串 例:001)n);/輸入數(shù)據(jù)doscanf(%s,&p1-num);if(strlen(p1-num)4) print;while(strlen(p1-num)4);printf(請輸入課程名(1-10位字符串 例:math)n);doscanf(%s,&p1-proj);if(strl
11、en(p1-proj)10) print; while(strlen(p1-proj)10);printf(請輸入學分(兩位實數(shù),整數(shù)部分1位,小數(shù)部分1位,例:1.5)n);dox=0;scanf(%s,&p1-crdt);if(strlen(p1-crdt)4) print;elsefor(i=0;icrdt)i57|(p1-crdt)icrdt)4|x=1);printf(請輸入學時(兩位整數(shù) 例:32)n);dox=0;scanf(%s,&p1-hour);if(strlen(p1-hour)3) print;elsefor(i=0;ihour)i57|(p1-hour)ihour)3
12、|x=1);printf(請輸入學期(以為整數(shù) 例:2)n);dox=0;scanf(%s,&p1-term);if(strlen(p1-term)2) print;elsefor(i=0;iterm)i57|(p1-term)iterm)2|x=1);printf(請輸入周次(例1-17)n);doscanf(%s,&p1-week);if(strlen(p1-week)5) print; while(strlen(p1-week)5); printf(請輸入日期(三位周日期 例:mon、sat)n);doscanf(%s,&p1-date);if(strlen(p1-date)3) pri
13、nt; while(strlen(p1-date)3); printf(請輸入節(jié)次(例:5-6)n);doscanf(%s,&p1-period);if(strlen(p1-period)5) print; while(strlen(p1-period)5);printf(請輸入教室(例:2-201)n);doscanf(%s,&p1-room);if(strlen(p1-room)6) print; while(strlen(p1-room)6);if(n=1) head=p1;/如果n=1,(即當前為第一個節(jié)點),就使head指向頭結點,作為頭指針。system(CLS);/輸入完畢,清屏
14、printf(*n);/輸出提示信息printf(* 輸入1繼續(xù)添加 *n); printf(* 輸入2保存并退出 *n); printf(*n);doscanf(%d,&z);if(z2) print;/該循環(huán)體使用戶輸入選項代碼并判斷代碼是否合理while(z2); if(z=1)/如果用戶選擇繼續(xù)添加,進入該分支p1=(struct lesson *)malloc(len);/利用malloc函數(shù),開辟一個新節(jié)點 (p2-next)=p1;/令前一個結構體的next指針指向后一個節(jié)點,將兩個結構體鏈接起來p2=p1;/令另一個指針也指向下一個節(jié)點,便于下次使用else/如果用戶選擇保存并
15、退出選項,進入該分支。 (p2-next)=NULL;/令最后一個節(jié)點的next指針指向NULL; break;/跳出循環(huán)n=0-1;save(n,head);/調(diào)用save函數(shù),將已經(jīng)建立的鏈表存入文件mainpage();/返回主界面void save(int m,lesson *p)/save函數(shù),將數(shù)據(jù)保存到硬盤的文件中靜FILE *fp;/聲明一個文件指針lesson *p1=p;/聲明一個結構體指針fp=fopen(D:data.txt,wb);/以寫為目的打開D:data.txt路徑下的二進制文件while(p-next!=NULL)/當指針p指向的節(jié)點
16、中的next指針不為空時(證明沒有保存完畢),進入循環(huán)體 if(fwrite(p,len,1,fp)!=1) printf(保存文件失??!n);/用fwrite函數(shù)的返回值來反映是否成功保存每一個節(jié)點 else printf(保存文件成功!n);p=p1-next;/使結構體指針指向下一個節(jié)點;p1=p;if(p-next=NULL&n=-1)if(fwrite(p,len,1,fp)!=1) printf(保存文件失敗!n);/用fwrite函數(shù)的返回值來反映是否成功保存每一個節(jié)點 else printf(保存文件成功!n); fclose(fp);/關閉文件void serch()/查詢函
17、數(shù)(包含節(jié)點的刪除與修改董永博int i,k,m,j=1;/聲明一些需要用到的變量char p10;/聲明一個字符型數(shù)組,用以存放用戶輸入的需要查詢的相關信息struct lesson *q1,*q2,*head=NULL;/聲明讀取鏈表所需要的三個結構體指針FILE *fp;/聲明一個文件指針do fp=fopen(D:data.txt,rb);/以讀取為目的打開D:data.txt路徑下的二進制文件 if(ferror(fp) clearerr(fp);/如果打開文件錯誤,立即清除錯誤后產(chǎn)生的標記,便于文件下次正常打開 if(fp=NULL)/如果文件指針指向NU
18、LL(代表該文件不存在)則進入該分支 printf(無法打開文件!n); exit(0); q1=q2=(struct lesson *)malloc(len);/文件打開后,在內(nèi)存中開辟空間,存放文件讀取到的數(shù)據(jù) fread(q1,len,1,fp);/讀取第一個節(jié)點 if(feof(fp)/用feof函數(shù)的返回值來判斷該文件是否為空文件 printf(沒有存儲課程信息!n); mainpage(); q2=q1;/兩個指針同時指向第一個節(jié)點 m=0;/將m 清零,便于接下來記錄節(jié)點總數(shù) while(!feof(fp)/利用feof函數(shù)的返回值來判斷文件是否讀取完畢 m=m+1;/記錄節(jié)點數(shù)
19、 if(m=1)head=q1;/如果為第一個節(jié)點,使head指針指向該節(jié)點 q1=(struct lesson *)malloc(len);/繼續(xù)開辟下一個節(jié)點 q2-next=q1;/將新節(jié)點與上一個節(jié)點鏈接起來 q2=q1; fread(q1,len,1,fp);/讀取文件內(nèi)容,存入新節(jié)點 q2-next=NULL;/文件讀取完畢后,令鏈表的最后一個節(jié)點的next指針指向NULL q1=q2=head;/兩個結構體指針重新指向頭結點printf(*n);/輸出提示信息 printf(* 輸入0查看全部課程 *n); printf(* 輸入1按課程名查詢 *n); printf(* 輸入2
20、按課程編碼查詢 *n); printf(* 輸入3按周日期查詢 *n); printf(* 輸入4按起始周查詢 *n);printf(* 輸入5返回主界面 *n); printf(*nn); do scanf(%d,&k); if(k5) print; while(k5); switch(k) case 0:/當用戶選擇查看全部課程信息時,進入該分支printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n); for(i=1;inext;/指針指向下一個結點 q2=q1;q2-next=NULL; break; case 1:/當用戶選擇按課程名查詢時,進入該分支 print
21、f(請輸入課程名?。?-10位字符串 例:math)n); do scanf(%s,&p); if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);/輸入要查詢的課程名 temp=0;/將temp歸零,便于記錄所查詢到的節(jié)點為第幾節(jié)點,便于下面修改函數(shù)和刪除函數(shù)的查找 do if(!strcmp(q2-proj,p)/通過字符串比較來查找需要查找的信息 temp=temp+1;/記錄節(jié)點數(shù) printf(查詢到%s相關的課程信息為:nn,p);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n); output(q2
22、);/調(diào)用輸出函數(shù) break;/跳出循環(huán) else/如果內(nèi)容與用戶輸入字符串不相等,查找下一個節(jié)點j=j+1; q1=q2-next; q2=q1; while(q2-next!=NULL); if(temp=0) printf(未查詢到相關課程!n);/如果temp等于零,則代表沒有查詢到相關信息elseprintf(*n);/如果查詢到相關課程 printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n);printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);i
23、f(o=1) printf(對不起,您沒有權限!請聯(lián)系管理員!n);/如果學生登錄,由于key函數(shù)返回值為1,就不開放刪除修改功能else/如果是管理員登錄,則可以使用刪除,修改,添加等功能switch(k)/通過管理員的選擇代碼,分別調(diào)用不同的函數(shù) case 0:alter(m,j,head);break;/調(diào)用修改函數(shù),將查詢到的課程的位置,鏈表的總節(jié)點數(shù)。鏈表的頭指針傳給函數(shù) case 1:head=dele(m,j,head);break;/調(diào)用刪除函數(shù),將返回的指針作為下一次打開的頭指針 case 2:add(m,head);break;/調(diào)用添加函數(shù),在鏈表的后面繼續(xù)添加 brea
24、k; case 2: printf(請輸入課程編碼(1-4位字符串 例:001)n);/輸入數(shù)據(jù) do scanf(%s,&p); if(strlen(q1-num)4) print; while(strlen(q1-num)4); temp=0; do if(!strcmp(q2-num,p) temp=temp+1; printf(查詢到編碼為%s的課程信息為:nn,p);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-next!=NULL);
25、 if(temp=0) printf(未查詢到相關課程!n);elseprintf(*n); printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n); printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(對不起,您沒有權限!請聯(lián)系管理員!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:add(m,head
26、);break; break; case 3: printf(請輸入周日期?。ㄈ恢苋掌?例:mon、sat)n); do scanf(%s,&p); if(strlen(q1-date)3) print; while(strlen(q1-date)3); temp=0; do if(!strcmp(q2-date,p)temp=temp+1; printf(查詢到%s的課程信息為:nn,p);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-nex
27、t!=NULL); if(temp=0) printf(未查詢到相關課程!nn);elseprintf(*n); printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n);printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(對不起,您沒有權限!請聯(lián)系管理員!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:a
28、dd(m,head);break; break; case 4: printf(請輸入起始周(例1-17)!n); do scanf(%s,&p); if(strlen(q1-week)5) print; while(strlen(q1-week)5); temp=0; do if(!strcmp(q2-week,p)temp=temp+1; printf(查詢到%s周的課程信息為:nn,p);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-nex
29、t!=NULL); if(temp=0) printf(未查詢到相關課程!n);elseprintf(*n); printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n);printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(對不起,您沒有權限!請聯(lián)系管理員!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:ad
30、d(m,head);break; break;case 5:mainpage();break;/返回主界面 printf(*n); printf(* 輸入0終止查詢并返回主界面 *n); printf(* 輸入1重新查詢 *n);printf(*n);scanf(%d,&j);system(CLS); while(j);if(j=0) mainpage();void alter(int all,int b,lesson *head)/修改課程函趙炳舒lesson *q1,*q2;int k,i,x;q1=q2=head;for(i=2;inext;q2=q1;prin
31、tf(您要修改的課程為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q2);printf(*n);/輸出提示信息 printf(* 輸入0修改課程編碼 *n); printf(* 輸入1修改課程名 *n);printf(* 輸入2修改學分 *n); printf(* 輸入3修改學時 *n);printf(* 輸入4修改學期 *n); printf(* 輸入5修改周次 *n);printf(* 輸入6修改日期 *n); printf(* 輸入7修改節(jié)次 *n);printf(* 輸入8修改教室 *n);printf(*nn); do scan
32、f(%d,&k); if(k8) print; while(k8);switch(k)case 0:printf(您要修改的原編碼為%sn,q1-num);/提示修改的內(nèi)容printf(請輸入新編碼(1-4位字符串 例:001):n); do scanf(%s,&q1-num); if(strlen(q1-num)4) print; while(strlen(q1-num)4);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);/輸出修改后本結點內(nèi)所有數(shù)據(jù)save(all,head);/保存修改break;
33、/跳出case 1:printf(您要修改的原課程名為%sn,q1-proj);printf(請輸入新課程名(1-10位字符串 例:math):n);do scanf(%s,&q1-proj); if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 2:printf(您要修改的原學分為%fn,q1-crdt);printf(請輸入新學分:n); do x
34、=0; scanf(%s,&q1-crdt); if(strlen(q1-crdt)4) print; else for(i=0;icrdt)i57|(q1-crdt)icrdt)4|x=1);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 3:printf(您要修改的原學時為%dn,q1-hour);printf(請輸入新學時(兩位整數(shù) 例:32):n); do x=0; scanf(%s,&q1-hour); if(strlen(q1-hour)3)
35、 print; else for(i=0;ihour)i57|(q1-hour)ihour)3|x=1);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 4: printf(您要修改的原學期為%dn,q1-term);printf(請輸入新學期(一位整數(shù) 例:2):n); do x=0; scanf(%s,&q1-term); if(strlen(q1-term)2) print; else for(i=0;iterm)i57|(q1-term)iter
36、m)2|x=1);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 5:printf(您要修改的原周次為%sn,q1-week);printf(請輸入新周次:n);do scanf(%s,&q1-week); if(strlen(q1-week)5) print; while(strlen(q1-week)5); printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);sav
37、e(all,head);break;case 6:printf(您要修改的原日期為%sn,q1-date);printf(請輸入新日期:n);do scanf(%s,&q1-date); if(strlen(q1-date)3) print; while(strlen(q1-date)3);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 7:printf(您要修改的原節(jié)次為%sn,q1-period);printf(請輸入新節(jié)次:n);do scanf(
38、%s,&q1-period); if(strlen(q1-period)5) print; while(strlen(q1-period)5);printf(修改成功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 8:printf(您要修改的原教室為%sn,q1-room);printf(請輸入新教室:n);do scanf(%s,&q1-room); if(strlen(q1-room)6) print; while(strlen(q1-room)6);printf(修改成
39、功,結果為:n);printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;printf(*n);/提示選項信息 printf(* 輸入1繼續(xù)查詢課程 *n); printf(* 輸入2返回主界面 *n);printf(*nn); do scanf(%d,&k); if(k2) print; while(k2);switch(k)case 1:serch();break;/返回查詢函數(shù)case 2:mainpage();break;/返回主界面lesson *dele(int all,int b,lesson
40、*head)/刪除函靜int i,k;lesson *q1,*q2,*q3;q1=q2=q3=head;for(i=2;inext;q2=q1;printf(您要刪除的課程是:n);if(b=1)/如果要刪除的結點是第一個節(jié)點,printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q1);elseq3=q1-next;/如果要刪除的結點不是第一個節(jié)點進入該分支printf(課程編碼 課程名 學分 學時 學期 周次 日期 節(jié)次 教室n);output(q3);printf(*n);printf(* 輸入0確認刪除 *n); prin
41、tf(* 輸入1取消刪除 *n);printf(*n);do scanf(%d,&k); if(k1) print;/是否確認刪除 while(k1);if(!k)/如果確認刪除,則進入if(b=1)head=q1-next;/如果要刪除第一個節(jié)點q1-next=NULL;/令第一個節(jié)點的next指針指向NULLall=all-1;/使節(jié)點總數(shù)減少一個free(q1);/釋放第一個節(jié)點所占的內(nèi)存save(all,head);/向save函數(shù)提供新的頭指針,以便保存新鏈表else/如果要刪除的不是頭結點q3=q1-next;/令q3指向要刪除的結點q1=q3-next;/令q1指向要刪除節(jié)點的后
42、一個節(jié)點q2-next=q1;/令前一個結點的next指針指向后一個結點q3-next=NULL;/令要刪除的結點的next指針指向NULL all=all-1;/令節(jié)點總數(shù)減少一個free(q3);/釋放內(nèi)存 save(all,head);/保存新鏈表 return(head);/返回新的頭指針void add(int all,lesson *head)/添加函數(shù)陳佳興int i,z,x;lesson *q1,*q2;q1=q2=head;for(i=2;inext;q2=q1;q1=(struct lesson *)malloc(len);/開辟新的內(nèi)存空間,來存
43、放新數(shù)據(jù)q2-next=q1;/將新節(jié)點連接到原來的最后一個節(jié)點上q2=q1;n=0;/使n歸零,以便于記錄新增的結點數(shù)do n=n+1;/記錄新增節(jié)點數(shù) printf(請輸入課程編碼(1-4位字符串 例:001)n);/輸入數(shù)據(jù)doscanf(%s,&q1-num);if(strlen(q1-num)4) print;while(strlen(q1-num)4);printf(請輸入課程名(1-10位字符串 例:math)n);doscanf(%s,&q1-proj);if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);printf(請
44、輸入學分(兩位實數(shù),整數(shù)部分1位,小數(shù)部分1位,例:1.5)n);dox=0;scanf(%s,&q1-crdt);if(strlen(q1-crdt)4) print;elsefor(i=0;icrdt)i57|(q1-crdt)icrdt)4|x=1);printf(請輸入學時(兩位整數(shù) 例:32)n);dox=0;scanf(%s,&q1-hour);if(strlen(q1-hour)3) print;elsefor(i=0;ihour)i57|(q1-hour)ihour)3|x=1);printf(請輸入學期(以為整數(shù) 例:2)n);dox=0;scanf(%s,&q1-term)
45、;if(strlen(q1-term)2) print;elsefor(i=0;iterm)i57|(q1-term)iterm)2|x=1);printf(請輸入周次(例1-17)n);doscanf(%s,&q1-week);if(strlen(q1-week)5) print; while(strlen(q1-week)5); printf(請輸入日期(三位周日期 例:mon、sat)n);doscanf(%s,&q1-date);if(strlen(q1-date)3) print; while(strlen(q1-date)3); printf(請輸入節(jié)次(例:5-6)n);dosc
46、anf(%s,&q1-period);if(strlen(q1-period)5) print; while(strlen(q1-period)5);printf(請輸入教室(例:2-201)n);doscanf(%s,&q1-room);if(strlen(q1-room)6) print; while(strlen(q1-room)6); printf(*n); printf(* 輸入1繼續(xù)添加 *n);/輸出提示信息 printf(* 輸入2保存并退出 *n); printf(*n); do scanf(%d,&z); if(z2) print; while(z2); if(z=1)/如
47、果選擇繼續(xù)添加 q1=(struct lesson *)malloc(len);/開辟新空間 (q2-next)=q1;/指針指向新結點 q2=q1; else/如果選擇停止添加,并保存 (q2-next)=NULL;/令尾結點的next指針指向NULL break;/跳出while(1);n=n+all;/得到新鏈表的節(jié)點總數(shù) save(n,head);/傳參,保存void output(lesson *q2)/輸出函炳舒printf(%8s %6s %4s %4s %4s %4s %4s %4s %4sn,q2-num,q2-proj,q2-crdt,q2-hou
48、r,q2-term,q2-week,q2-date,q2-period,q2-room);int key()/登錄函數(shù)陳佳興char str110=a,d,m,i,n,str210;/聲明兩個字符串,并初始化其中一個 int a,k; printf(*n); printf(* 輸入1學生登錄 *n); printf(* 輸入2管理員登錄 *n); printf(*n); do scanf(%d,&a);/輸入選項,并記錄登錄類型 if(a2) print; while(a2);system(CLS); printf(請輸入密碼:);do scanf(%s,&str2)
49、;/輸入密碼(即另一個字符串的內(nèi)容) if(strcmp(str1,str2)=0)/進行兩個字符串的對比,利用函數(shù)返回值確定兩個字符串是否相等,即密碼是否正確printf(登錄成功!nn);k=0; elseprintf(輸入密碼錯誤,請重新輸入);k=1;while(k); return(a);/返回登錄類型代碼,即學生登錄或者管理員登錄運行結果 首界面 管理員登錄界面 學生登錄選擇增加時界面 添加課程 輸入文件保存查看所有輸入課程 選擇查詢方式 輸出查詢結果 修改課程信息 保存修改信息 刪除課程信息課程設計總結以往學習的課程知識雖然也有過一些實踐機會,但絕大多數(shù)的實踐都是一些較小的程序,
50、僅有幾十行甚至幾行代碼即可實現(xiàn)。此次大型系統(tǒng)的設計和實現(xiàn),讓我們用到了所學過的每一點知識,增強了對C語言的應用能力。此外,非常重要的一點是增強了我們的團隊合作意識和課外自學能力,由于其中用到的一些知識,僅僅只接觸過理論知識而并沒有經(jīng)歷過實踐,為了能夠完成該項課程設計,團隊成員通過上網(wǎng)或圖書館查資料去學習并掌握一些本來不是特別熟練的一些算法和數(shù)據(jù)結構的相關知識。在課程設計過程中,曾經(jīng)出現(xiàn)過很多的問題。成員通過各種途徑獲得知識,老師也給與了我們很大的幫助,為我們找出了很多問題也解決了很多的問題,對此小組非常感激。其中,老師特意提起的我們程序的模塊化的嚴重不足,導致語句有效率低,程序冗長,不容易讀懂
51、維護和修改。我們也深刻體會了模塊化不足所造成的不便,使我們認識到了自己的不足,在今后的學習實踐中,我們會逐漸學著去完善自己的程序,使自己的程序更加精煉,更加易用。通過此次課程設計實踐和設計過程中的學習,我們也看到了C語言的功能的強大。這是我們學習的第一門計算機程序語言課程,也是我們將來學習的基礎,我們應該掌握C語言的基本用法,深入研究更多的程序,多多實踐,以提高自己的實踐應用能力。附錄資料:不需要的可以自行刪除 C語言-INT10中斷號視頻服務程序00H(設置視頻模式)輸入: AH=00H AL=視頻模式輸出: 無 說明:視頻服務程序00H用來設置視頻配置為表10-l中列出之一。AL寄存器給定
52、所需視頻模式。若設置了新視頻模式,則清除屏幕。 視頻服務程序0lH(設置光標大小)輸入: AH=01H CH=光標開始掃描行 CL=光標結束掃描行輸出: 無說明:該服務程序用于正文模式。在一個字符單元內(nèi)由一行或幾行組成的光標將在字符顯示位置得閃爍。該服務程序定義光標的顯示行數(shù)。對CGA模式,8掃描行(07)用于光標。對EGA模式,使用14行(013)。MCGA和VGA適配器,光標可具有16掃描行(015)高。缺省設置如下: CGA: CH6,CL7 EGA: CHll,CL12 MCGA和VGA: CH量13,CL1 視頻服務程序02H(設置光標位置)輸入: AH=02H BH=光標頁號 DH
53、=光標行號 DL=光標列號輸出: 無說明:該服務器序用于將光標移到指定行和列位置。該服務程序即可用于正文模式也可用于圖形模式;然而,僅在正文模式下才顯示光標。屏幕左上角為坐標系統(tǒng)的原點。對支持多頁的正文和圖形模式,則必須指定頁號,以保證光標位置正確。視頻服務程序03H(讀光標位置)輸入: AH=03H BH=頁號輸出: CH=光標開始行 CL=光標結束行 DH=行號 DL列號說明:該服務程序用于獲取光標大小和位置。BH給定了頁號。CH中存放光標開始掃描行,而CL中為光標結束掃描行。DH中存放行位置,DL中為列位置。視頻服務程序05H(設置活動顯示頁)輸入: AH=05H AL=活動頁號輸出:
54、無 說明:該服務程序為正文和圖形模式用來設置活動顯示頁號。AL指定所需頁號。對多數(shù)正文模式,頁號范圍為0一7。對具有足夠視頻緩沖EGA和VGA適配器,可支持多頁圖形。對所有正文和圖形模式,缺省為0頁。視頻服務程序06H(向上翻滾活動窗口)。輸入:AH=06HAL=翻滾行數(shù)BH=空白行屬性CH左上角行號CL=左上角列號 DH右下角行號 Dl右下角列號輸出: 無 說明:該服務程序用來創(chuàng)建和翻滾一正文窗口。CH和CL中給出了正文窗口左上角坐標,DH和DL中給出了正文窗口右下角坐標。AL中定義了翻滾的行數(shù)。若AL00H,則正文窗口為空白。當滾動窗口時,底部行是空白行,其屬性由BH中指定。視頻服務程序0
55、7H(向下翻滾窗口)輸入:AH=07HAL=翻滾行數(shù)BH=空白行屬性CH=左上角行號CL=左上角列號DH=右下角行號DL=右下角列號輸出: 無說明:該服務程序用來創(chuàng)建和翻滾一正文窗口。CH和CL中給出了正文窗口左上角坐標,DH和DL中給出了正文窗口右下角坐標。AL中定義了翻滾的行數(shù)。若AL00H,則正文窗口為空白。當滾動窗口時,頂部行為空白,其屬性由BH中指定。視頻服務程序08H(讀字符和屬性)輸入: AH=08H BH=活動頁號輸出: AH=字符屬性 AL=字符碼說明:該服務程序用于讀取正文或視頻模式下,光標所在處字符。在圖形模式下,獲取的字符同圖形模式下使用的字符生成表有關。在正文模式下,
56、將獲得字符的ASCII碼。字符屬性存放在AH中,字符ASCII碼存放在AL中。圖形模式下,AH中內(nèi)容無意義.視頻服務程序09H(寫字符和屬性)輸入: AH09H AL=寫字符的ASCII碼 BL=寫字符的屬性 BH=活動頁號 CX=重復寫字符和屬性次數(shù)輸出: 無 說明:該服務程序?qū)懸粋€字符到屏幕當前光標處。AL中指定字符碼。正文模式下,BL中指定字符屬性。圖形模式下,BL指定背景顏色。字符可重復寫。CX為寫字符及屬性的次數(shù)。視頻服務程序0FH(取當前視頻模式)輸入: AH0FH輸出: AH每行字符數(shù) AL當前顯示模式 BH活動頁號說明:該服務程序用來獲取當前視頻模式,屏幕寬(以字符計),以及活
57、動顯示頁號;視頻顯示模式存放在AL中。屏幕寬度(以字符計)存放在AH中,活動頁號存放在BH中。文件相關函數(shù)函數(shù)名: fopen功 能: 打開一個流用 法: FILE *fopen(char *filename, char *type);函數(shù)名: fclose功 能: 關閉一個流用 法: int fclose(FILE *stream); fopen()函數(shù)提供了幾種打開文件的方式,這是由其字符指針參數(shù)type決定的。以下給出打開方式列表:參數(shù)作用R只讀W新建、可寫,如果文件存在則覆蓋A存在則在文件后附加,如果不存在則新建后寫r+更新一個存在的文件(讀和寫)w+增加一個新的文件更新(讀和寫),如
58、果文件存在則覆蓋a+存在則在文件后附加(讀和寫),如果不存在則新建后更新(讀和寫)*以文本模式打開一個存在或新建的文件,附加”t”在參數(shù)后(rt, w+t, etc.)。*以二進制模式打開一個存在或者新建的文件,附加”b”在參數(shù)后(wb, a+b, etc.)。函數(shù)名: fseek功 能: 重定位流上的文件指針用 法: int fseek(FILE *stream,long offset,int fromwhere); 讀取文件函數(shù):函數(shù)名: fread功 能: 從一個流中讀數(shù)據(jù)用 法: int fread( void *ptr, int size, int nitems, FILE *str
59、eam ); 寫入文件函數(shù):函數(shù)名: fwrite功 能: 寫內(nèi)容到流中用 法: int fwrite( void *ptr, int size, int nitems, FILE *stream ); fseek()函數(shù)提供了文件指針的三個初始位置,這是由其參數(shù)fromwhere決定的,以下給出其列表:常量值文件定位SEEK_SET0從文件頭開始尋找SEEK_CUR1從文件當前位置開始尋找SEEK_END2從文件最后開始尋找函數(shù)名: fprintf功 能: 傳送格式化輸出到一個流中用 法: int fprintf( FILE *stream, char *format, argument,.
60、 );函數(shù)名: fscanf功 能: 從一個流中執(zhí)行格式化輸入用 法: int fscanf( FILE *stream, char *format,argument. );發(fā)聲函數(shù)函數(shù)名: sound功 能: 以指定頻率打開PC揚聲器用 法: void sound(unsigned frequency);函數(shù)名: nosound功 能: 關閉PC揚聲器用 法: void nosound(void);常規(guī)內(nèi)存操作函數(shù)申請函數(shù):malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()函數(shù)名: malloc功 能: 內(nèi)存分配函數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年大數(shù)據(jù)中心機房建設工程合同
- 2024年廣告媒體采購發(fā)布合同
- 2024城市公園環(huán)境衛(wèi)生承包協(xié)議
- 2024年工程貸款協(xié)議模板助力項目發(fā)展
- 2024年危險品運輸合同范本
- 2024年應急通信系統(tǒng)設備采購及安裝合同
- 2024年工程質(zhì)量檢測居間合同
- 2024年雙方共同投資建立教育咨詢公司的合同
- 挑食偏食課件教學課件
- 2024婚姻關系解除后債務清償合同
- 河北省石家莊市長安區(qū)2023-2024學年五年級上學期期中英語試卷
- 品牌經(jīng)理招聘筆試題及解答(某大型國企)2025年
- 多能互補規(guī)劃
- 珍愛生命主題班會
- 《網(wǎng)絡數(shù)據(jù)安全管理條例》課件
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 第7課《回憶我的母親》課件-2024-2025學年統(tǒng)編版語文八年級上冊
- 八年級歷史上冊(部編版)第六單元中華民族的抗日戰(zhàn)爭(大單元教學設計)
- 公司研發(fā)項目審核管理制度
- 《詩意的色彩》課件 2024-2025學年人美版(2024)初中美術七年級上冊
- 小學生主題班會《追夢奧運+做大家少年》(課件)
評論
0/150
提交評論