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

下載本文檔

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

文檔簡介

C 語言課程設(shè)計(jì)報(bào)告 0 學(xué)生選修課系統(tǒng)設(shè)計(jì) 一 、設(shè)計(jì)目的 當(dāng)今時(shí)代是飛速發(fā)展的信息時(shí)代, 在各行各業(yè)中離不開信息處理,這正是計(jì)算機(jī)被廣泛應(yīng) 用于信息系統(tǒng)的環(huán)境。計(jì)算機(jī)的最到好處的于利用它能夠進(jìn)行信息管理, 使用計(jì)算機(jī)進(jìn)行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。 尤其對于復(fù)雜的信息管理,計(jì)算機(jī)能夠充分發(fā)揮它的優(yōu)越性。計(jì)算機(jī)進(jìn)行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。本系統(tǒng)就是為了管理好學(xué)生選課信息而設(shè)計(jì)的。 數(shù)據(jù)處理手工操作,工作量大,出錯(cuò)率高,出錯(cuò)后不易更改, 造成了時(shí)間上的浪費(fèi)。 基于這個(gè)問題, 我認(rèn)為有必要建立一個(gè)學(xué)生選課系統(tǒng),使學(xué)生選課信息管理工作規(guī)范化、系統(tǒng)化、程序化,避免學(xué)生選課管理的隨意性,提高信息處理的速度和準(zhǔn)確性,能夠及時(shí)、準(zhǔn)確、有效的查詢和修改選課情況。 二、題目 說明 假定有 n門課程 , 每門課程都有課程編號 , 課程名稱 , 課程性質(zhì) , 總學(xué)時(shí) ,授課學(xué)時(shí) , 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) , 學(xué)分 , 開課學(xué)期等信息 , 學(xué)生可按要求 (如總學(xué)分不得少于 60)自由選課 。 試設(shè)計(jì)一選修課程系統(tǒng) , 使之能提供一下功能 : (1) 系統(tǒng)以菜單方式工作 ; (2) 課 程 信 息 和 學(xué) 生 信 息 的 錄 入 功 能 ( 課 程 信 息 有 文 件 保 存 )-輸入 ; (3) 課程信息瀏覽功能 -輸出 ; (4) 查詢功能 (至少一種查詢方式 )-算法 ; (5) 按學(xué)分查詢 ; (6) 某門課程學(xué)生選修情況 (可選項(xiàng) )。 提示 數(shù)據(jù)結(jié)構(gòu)可用結(jié)構(gòu)體 , 包括課程和選秀兩個(gè)結(jié)構(gòu)體 , 其中課程結(jié)構(gòu)體包括課程編號 、 課程名稱 、 課程性質(zhì) 、 總學(xué)時(shí) 、 授課學(xué)時(shí) 、 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) 、 學(xué)分 、 開課學(xué)期 。 選修結(jié)構(gòu)體成員包括學(xué)號 , 課程編號 , 該結(jié)構(gòu)體的建立主要是為了查詢某門課程學(xué)生選修情況 .。 三 、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) C 語言課程設(shè)計(jì)報(bào)告 1 本系統(tǒng)的實(shí)現(xiàn) , 全部采用鏈表這種數(shù)據(jù)結(jié)構(gòu) , 用鏈表實(shí)現(xiàn)課程的查找 、 添加 、 刪除 、 課程的選修 、 追加選修的課程 , 課程信息采用結(jié)構(gòu)體這種數(shù)據(jù)結(jié)構(gòu) 。 typedef struct subjects int num; /課程編號 char name20; /課程名稱 char kind10; /課程性質(zhì) int stime; /總學(xué)時(shí) int ttime; /授課學(xué)時(shí) int etime; /實(shí)驗(yàn)或上機(jī)學(xué)時(shí) int score; /學(xué)分 int term; /開課學(xué)期 struct subjects *next; SUB; SUB *head=NULL; 四、 程序 分析 現(xiàn)代的社會(huì)是信息化的社會(huì),信息無所不在。在生產(chǎn)領(lǐng)域、流通領(lǐng)域、各個(gè)部門每天都和信息打交道,如何處理如此多的信息成為了一個(gè)重要的課題。學(xué)生在學(xué)期開始選課是教學(xué)活動(dòng)中的一個(gè) 重要環(huán)節(jié),該環(huán)節(jié)如果能管理好,它不僅能加快學(xué)生的選課速度,也提高了整個(gè)活動(dòng)的效率。 大學(xué)一般都有上千名學(xué)生,每學(xué)期開始學(xué)生都要選課,因而產(chǎn)生了大量的課程信息。考慮到用戶使用的方便和處理的信息量系統(tǒng)要完成錄入,保存,查詢,修改和刪除課程信息的各種過程,能打印出課程信息表 。 對象: 系統(tǒng)的主要使用對象是需要選課的學(xué)生。學(xué)生在選課是要察看各個(gè)課程的詳細(xì)信息,還要選擇一些感興趣的課程,需要生成課表,在發(fā)現(xiàn)課程有沖突后能夠修改先前選擇的信息。需要隨學(xué)生選課的變化,計(jì)算相應(yīng)的總學(xué)分。在全部選定后,打印報(bào)表。系統(tǒng)還需要管理員來查看和修改學(xué)生的總體選課情況課程信息和學(xué)生信息。 五 、 程序 設(shè)計(jì) 大綱 C 語言課程設(shè)計(jì)報(bào)告 2 主 模 塊 管理 員模塊 學(xué)生模塊 瀏 覽 課 程 查 詢 課 程 添 加 課 程 刪 除 課 程 瀏 覽 所 有 課程 查詢課程信息 選擇選修課程 瀏覽我選修的課程 刪除錯(cuò)選的課程 C 語言課程設(shè)計(jì)報(bào)告 3 六 、 模塊設(shè)計(jì) (一 ) 主函數(shù) , 頭文件及結(jié)構(gòu)體聲明 主函數(shù)設(shè)計(jì)地比較簡潔 , 只是提供一個(gè)主菜單 , switch 語句 將整個(gè)程序分為兩個(gè)大的 功能 模塊 : 程序 #include stdio.h #include string.h #include stdlib.h #includemalloc.h void prin1(); void choose(); typedef struct subjects /課程結(jié)構(gòu)體 int num; /課程編號 char name20; /課程名稱 char kind10; /課程性質(zhì) int stime; /總學(xué)時(shí) int ttime; /授課學(xué)時(shí) int etime; /實(shí)驗(yàn)或上機(jī)學(xué)時(shí) int score; /學(xué)分 int term; /開課學(xué)期 struct subjects *next; SUB; SUB *head=NULL; int main() int n,w=1; do system(cls); puts(nntt*MENU*nn); 進(jìn)入選課系統(tǒng) 選擇序號進(jìn)行選課 進(jìn)入下一層 C 語言課程設(shè)計(jì)報(bào)告 4 puts(tttt1.以管理員身份登錄 n); puts(tttt2.以學(xué)生身份登錄 n); puts(tttt3.退出 ); puts(nntt*n); printf(Chiose your number(1-3): bb); scanf(%d,&n); switch(n) case 1:Mangers() ;break; case 2:Students();break; case 3:w=0;break; default:; while(w=1); return 0; (二 ) 管理員功能模塊 管理員的功能一共有四個(gè)功能 : 瀏覽 , 查詢 , 添加 , 刪除課程 , 運(yùn)用字符串處理函數(shù)處理密碼的問題 , 用一個(gè) switch 語句實(shí)現(xiàn)函數(shù)的調(diào)用 : 管理員登錄菜單 輸入密碼 進(jìn)行 碼匹對驗(yàn)證 進(jìn)入管理員界面 i=3 i0 按任意鍵退出 是 否 否 是 C 語言課程設(shè)計(jì)報(bào)告 5 程序 void Mangers() int n,w=1,flag=0,i=3; char s8; char password7=1; do printf(nnEnter password:); scanf(%s,s); if(!strcmp(s,password) /進(jìn)行密碼匹配驗(yàn)證 flag=1; break; else printf(nnError! You only have %d times! Enter again:n,i-1); i-; while(i0); if(!flag) printf(you have Enter 3 times!); /輸入密碼超過了 3 次! exit(0); /自動(dòng)退出 do system(cls); puts(nntt* 管理員菜單*nn); puts(tttt1-瀏覽課程 n); puts(tttt2-查詢課程 n); puts(tttt3-添加課程 n); puts(tttt4-刪除課程 n); puts(tttt5-返回主菜單 ); puts(nntt*n); printf(Chiose your number(1-5): bb); scanf(%d,&n); switch(n) C 語言課程設(shè)計(jì)報(bào)告 6 case 1:prin();break; case 2:search();break; case 3:insert();savefile();break; case 4:del();savefile();break; case 5:return; default:; while(w=1); void Students() int n,w=1; do system(cls); puts(nntt* 學(xué)生菜單*nn); puts(tttt1-瀏覽所有課程 n); puts(tttt2-查詢課程信息 n); puts(tttt3-選擇選修課程 n); puts(tttt4-瀏覽我選修的課程 n); puts(tttt5-刪除錯(cuò)選課程 n); puts(tttt6-返回主菜單 ); puts(nntt*n); printf(Chiose your number(1-6): bb); scanf(%d,&n); switch(n) case 1:prin();break; case 2:search();break; case 3:choose();break; case 4:prin1();break; case 5:del();savefile1();break; case 6:return; default:; while(w=1); (三 ) 學(xué)生功能菜單 C 語言課程設(shè)計(jì)報(bào)告 7 學(xué)生功能菜單包括六個(gè)功能 : 瀏覽課程 , 查詢課程 , 選修課程 , 瀏覽我所選修的課程 , 添加選修課程 , 刪除錯(cuò)選的課程 , 也是用到 switch 語句來調(diào)用函數(shù) : 程序 void Students() /學(xué)生登錄菜單 int n,w=1; do system(cls); puts(nntt*學(xué)生菜單 *nn); puts(tttt1-瀏覽所有課程 n); puts(tttt2-查詢課程信息 n); puts(tttt3-選擇選修課程 n); puts(tttt4-瀏覽我選修的課程 n); puts(tttt5-刪除錯(cuò)選課程 n); puts(tttt6-返回主菜單 ); puts(nntt*n); printf(Chiose your number(1-6): bb); scanf(%d,&n); 學(xué)生登錄菜單 按 1-6 數(shù)字鍵進(jìn)入各選項(xiàng) 1、瀏覽所有課程 2、查詢課程信息 3、選擇選修課程 4、瀏覽我選修的課程 5、刪除錯(cuò)選課程 6、返回主菜單 進(jìn)入所選目標(biāo) C 語言課程設(shè)計(jì)報(bào)告 8 switch(n) case 1:prin();break; case 2:search();break; case 3:choose();break; case 4:prin1();break; case 5:del();savefile1();break; case 6:return; default:; while(w=1); (四 ) 創(chuàng)建鏈表模塊 C 語言課程設(shè)計(jì)報(bào)告 9 創(chuàng)建鏈表 輸 入 選 修 課 程 信 息( num,name,kind,stime,ttime,etime,score,term) 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; Head=NULL Head=p Tail-next=p; Tail=p; Tail-next=NULL; Return head; 創(chuàng)建完成 Scanf(num,name,kind,&stime,&ttime,&etime,&score,&term); 是 是 否 否 C 語言課程設(shè)計(jì)報(bào)告 10 程序 SUB *create_form() /創(chuàng)建鏈表 SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name20,kind10; int size=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; else tail-next=p; tail=p; scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term); tail-next=NULL; return head; C 語言課程設(shè)計(jì)報(bào)告 11 (五 ) 瀏覽模塊 瀏覽模塊主要用管理員中的 “瀏覽課程 ”和學(xué)生功能中的 “瀏覽所有所有課程 ”, 將所有的課程信息輸出 , 即將 all_sub.txt 文件里面的內(nèi)容全部輸出 : 瀏覽所有課程 SUB *ptr; head=NULL; readfile(); Head=NULL Printf(NO RECORDS); Return; 輸出 課程信息 是 否 C 語言課程設(shè)計(jì)報(bào)告 12 程序 void prin() /瀏覽所有課程 SUB *ptr; head=NULL; readfile(); if(head=NULL) printf(nnt*NO RECORDS!*n); return; printf(課程 編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(ptr=head;ptr;ptr=ptr-next) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); system(pause); void prin1() /瀏覽所有已選修課程 SUB *ptr; FILE *fp; if(fp=fopen(3.txt,r)=NULL) printf(Cannot open file.n); choose(); printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); while(!feof(fp) ptr=(SUB*)malloc(sizeof(SUB); fscanf(fp,%d%s%s%d%d%d%d%dn,&ptr-num,ptr-name,ptr-kind,&ptr-stime,&ptr-ttime,&ptr-etime,&ptr-score,&ptr-term); printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); C 語言課程設(shè)計(jì)報(bào)告 13 system(pause); (六 ) 查詢模塊 查詢模塊主要用于管理員功能中的 “查詢課程 ”和學(xué)生功能模塊中的 “查詢所有課程 ”, 查詢模塊共分為三個(gè)查詢方法 : 按課程名稱查找 , 按課程性質(zhì)查找和按學(xué)分查找 switch 語句中 , 每一個(gè) case 語句就是一中查詢方法 : 程序 void search() /課程信息查詢 int a,num; int t=1; char type10,min10; SUB *ptr; L1:system(cls); printf(nntt*請選擇查詢方式 *n); printf(nttt1-按課程名稱查找 n); printf(nttt2-按課程性質(zhì)查找 n); printf(nttt3-按學(xué)分查找 n); printf(nttt4-退出查找 n); 課程信息查詢 按 1-4 數(shù)字鍵進(jìn)入各選項(xiàng) 1、按課程名稱查找 2、按課程性質(zhì)查找 3、按學(xué)分查找 4、退出查找 進(jìn)入所選目標(biāo) C 語言課程設(shè)計(jì)報(bào)告 14 printf(nntt*n); printf(nnChiose your number(1-4): bb); scanf(%d,&a); switch(a) case 1:printf(請輸入要查找的課程的名稱 :); scanf(%s,min); printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(ptr=head;ptr;ptr=ptr-next) if(strcmp(min,ptr-name)=0) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0; if(t) printf(tn未找到 !n); t=1; system(pause); goto L1; case 2:printf(請輸入要查找的課程的性質(zhì) :); scanf(%s,type); printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(ptr=head;ptr;ptr=ptr-next) if(strcmp(type,ptr-kind)=0) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0; if(t) printf(tn未找到 !n); t=1; system(pause); goto L1; case 3:printf(輸入要查找的課程的學(xué)分 :); scanf(%d,&num); printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) C 語言課程設(shè)計(jì)報(bào)告 15 實(shí)踐或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(ptr=head;ptr;ptr=ptr-next) if(ptr-score=num) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0; if(t) printf(nt 未找到 !n); t=1; system(pause); goto L1; case 4:break; t=0; if(t) printf(nt 未找到 !n); t=1; system(pause); goto L1; case 4:break; /退出查找 (七 ) 插入鏈表模塊 插入鏈表操作主要用于添加課程 , 在整個(gè)課程信息中加入一些新課程 , 它在添加模塊中被調(diào)用 : C 語言課程設(shè)計(jì)報(bào)告 16 程序 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) 插入鏈表模塊 SUB *p1,*p2; p1=subj; head=NULL head=p1; head-next=NULL; p2=head;p2; p2=p2-next p2-next=NULL p2-next=subj; subj-next=NULL; break; eturn head; 是 否 否 否 是 是 C 語言課程設(shè)計(jì)報(bào)告 17 if(ptr2-next=NULL) ptr2-next=subj; subj-next=NULL; break; return head; (八 ) 添加模塊 添加模塊主要用于增加課程信息 ,采用鏈表的操作 : 插入課程信息 SUB *ptr,*subj; int size=sizeof(SUB); char ch,ch1; ch!=0 輸入(課程信息、課程編號、課程名稱、課程性質(zhì)、 總學(xué)分、授課學(xué)分、實(shí)踐或上機(jī)學(xué)時(shí)) ch1=getchar(); ch=getchar(); Return head; myInsert(subj); printf(nn 繼續(xù)插入請按回車 C語言課程設(shè)計(jì)報(bào)告 n); printf(n結(jié)束添加課程按 0 ) 是 否 C 語言課程設(shè)計(jì)報(bào)告 18 程序 void *insert() /插入課程信息 SUB *ptr,*subj; int size=sizeof(SUB); char ch,ch1; while(ch!=0) subj=(SUB *)malloc(size); ptr=subj; printf(輸入要插入的課程信息 :n); printf(ntt 請輸入課程編號 :);scanf(%d,&subj-num); printf(ntt請輸入課程名稱 :);scanf(%s,&subj-name); printf(ntt 請輸入課程性質(zhì) :);scanf(%s,&subj-kind); printf(ntt 請輸入總學(xué)時(shí) :);scanf(%d,&subj-stime); printf(ntt 請輸入授課學(xué)時(shí) :);scanf(%d,&subj-ttime); printf(ntt 請輸入實(shí)踐或上機(jī)學(xué)時(shí) :); scanf(%d,&subj-etime); printf(ntt 請輸入學(xué)分 :);scanf(%d,&subj-score); printf(ntt 請輸入開課學(xué)期 :);scanf(%d,&subj-term); myInsert(subj); printf(nn繼續(xù)插入請按回車 n); printf(n結(jié)束添加課程按 0: bb); ch1=getchar(); /*將回車鍵賦給 CH1,否則subj-term輸完后輸入的回車鍵會(huì)賦給 CH,因此用 CH1 填補(bǔ)。 */ ch=getchar(); return head; (九 ) 刪除模塊 刪除模塊主要用于管理員刪除課程信息學(xué)生刪除自己的選課 ,全部采用刪除鏈表中的某一個(gè) 節(jié)點(diǎn)的操作 : C 語言課程設(shè)計(jì)報(bào)告 19 刪除選修課程 SUB *p1,*p2; char ch,ch1; int num printf(輸入想要?jiǎng)h除的課程編號 ); scanf(%d,&num); 進(jìn)行編號查找并刪除 printf(n繼續(xù)刪除請按回車 n); printf(n結(jié)束刪除課程按 0: ); C 語言課程設(shè)計(jì)報(bào)告 20 程序 void *del() /刪除課程 - SUB *p1,*p2; char ch,ch1; int num; while(ch!=0) printf(輸入想要?jiǎng)h除的課程編號 : bbbbb); scanf(%d,&num); if(head-num=num) p2=head; head=head-next; free(p2); if(head=NULL) return NULL; p1=head; p2=head-next; while(p2) if(p2-num=num) p1-next=p2-next; free(p2); else p1=p2; p2=p1-next; printf(n繼續(xù)刪除請按回車 n); printf(n結(jié)束刪除課程按 0: bb); ch1=getchar(); /將回車鍵賦給 CH1,否則 num 輸完后再輸入的回車鍵會(huì)賦給 CH,因此用 CH1 填補(bǔ)。 ch=getchar(); return head; system(pause); C 語言課程設(shè)計(jì)報(bào)告 21 (十 ) 選修課程模塊 選修課程模塊采用插入鏈表的操作 : 程序 void choose() /選新課程 SUB *p,*q; 選新課程 printf(輸入要選修的課程的編號 n); printf(如果確認(rèn)輸入完要選修的課程的編號,請輸入 0); 程序?qū)斎氲男畔⑦M(jìn)行查找判斷 printf(“ 選修成功 ! n) printf(n 以上信息全部保存在 my_sub.txt中 n) C 語言課程設(shè)計(jì)報(bào)告 22 int a5; int num,total=0,i=0,j; printf(輸入要選修的課程的編號,編號之間以空格分開 n); scanf(%d,&num); printf(如果確認(rèn)輸入完要選修的課程的編號,請輸入 0: bb); while(num!=0) for(p=head;p;p=p-next) if(p-num=num) total=total+p-score; ai=num; i+; scanf(%d,&num); if(totalnext) if(q-num=aj) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term); fclose(fp); printf(ttn*選修成功 !*n); printf(n您選修的課程總學(xué)分為 %d,課程分別為 :n,total); printf(n 課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí) 踐或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(j=0;jnext) if(q-num=aj) printf(%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term); printf(n以上信息全部保存在 my_sub.txt中 n); system(pause); C 語言課程設(shè)計(jì)報(bào)告 23 (十一 ) 讀取文件模塊 讀取文件模塊是用來讀出文件內(nèi)容 , 并將內(nèi)容輸出到內(nèi)存中 , 當(dāng)輸入文件名時(shí) , 就能打開指定的文件 , 當(dāng)輸入 all_sub.txt 時(shí) , 打開所有課程信息的文件 ,當(dāng)輸入 my_sub.txt 時(shí) , 就是瀏覽學(xué)生選修的課程信息 。 程序 void readfile() /閱讀文件 void *myInsert(SUB*); SUB *newSub; /新課程 讀取文件 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); C 語言課程設(shè)計(jì)報(bào)告 24 int num,stime,ttime,etime; int score,term; char c,name20,kind10,fname20; FILE *fp; fp=fopen(2.txt,r); while(!feof(fp) newSub=(SUB*)malloc(sizeof(SUB); fscanf(fp,%d%s%s%d%d%d%d%dn,&newSub-num,newSub-name,newSub-kind,&newSub-stime,&newSub-ttime,&newSub-etime,&newSub-score,&newSub-term); myInsert(newSub); fclose(fp); (十二 ) 保存文件模塊 保存文件模塊共分為兩個(gè)子程序 , 分別是將修改的信息保存到 all_sub.txt和 my_sub.txt 文件中 : 程序 void savefile() /保存文件 SUB *p; FILE *fp;fp=fopen(2.txt,w); if(fp=NULL)exit(0); printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(創(chuàng)建后的信息已放入 2.txt文件中 n); system(pause); void savefile1() /保存文件 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%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(創(chuàng)建后的信息已放入 3.txt文件中 n); system(pause); C 語言課程設(shè)計(jì)報(bào)告 25 七、上機(jī)操作 保存文件 系統(tǒng)進(jìn)行檢測所要保存的文件 fprintf(fp,課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); p=head;p;p=p-next fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(創(chuàng)建后的信息已放入 all_sub.txt文件中n); system(pause); C 語言課程設(shè)計(jì)報(bào)告 26 開始運(yùn)行 管理員界面 C 語言課程設(shè)計(jì)報(bào)告 27 課程輸入模塊 管理員瀏覽模塊 C 語言課程設(shè)計(jì)報(bào)告 28 管理員課程查詢模塊 管理員添加模塊 C 語言課程設(shè)計(jì)報(bào)告 29 管理員刪除模塊 學(xué)生界面 C 語言課程設(shè)計(jì)報(bào)告 30 選課模塊 學(xué)生瀏覽模塊 C 語言課程設(shè)計(jì)報(bào)告 31 學(xué)生查詢模塊 學(xué)生刪除模塊 八 、 結(jié)果分析 程序的優(yōu)缺點(diǎn) C 語言課程設(shè)計(jì)報(bào)告 32 【功能上的優(yōu)點(diǎn)】 主要體現(xiàn)在以下三點(diǎn): 1.簡潔明了的程序菜單。程序主要采用了六組層次不同的菜單,相互獨(dú)立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。 2.人性化的程序提示語言,程序提示語言較人性化,不僅大多為祈使語句、疑問句,而且提示明確,具有較強(qiáng)的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地進(jìn)行程序的操作。 3.智能化的模塊設(shè)計(jì)。程序的智能化主要體現(xiàn)在減少了許多人工操作。如功能模塊操作結(jié)束后,均會(huì)返回主菜單進(jìn)行下一模板的運(yùn)行,并提示是否再進(jìn)行類似的操作,這樣給用戶帶來了操作的方便,大大提高了學(xué)生選課的效率。 本程序達(dá)到了 C 語言課程設(shè)計(jì)題目的所有要求。即本程序( 1)系統(tǒng)一菜單方式工作( 2)課程信息和學(xué)生選課信息錄入功能(課程信息用文件保存輸入( 3)課程信息瀏覽功能 輸出( 4)查詢功能(至少一種查詢方式) 算法( 5)按學(xué)分查詢( 6)某門課程學(xué)生選修情況(可選項(xiàng))的功能要求。 與此同時(shí),程序各模塊開發(fā)設(shè)計(jì)依據(jù)了程序的具體實(shí)際的使用情景,而有所改進(jìn),使其更具有實(shí)用性。 【程序的缺點(diǎn)】 主要表現(xiàn)在以下四點(diǎn): 1.程序雖然經(jīng)過多次精簡,但僅僅是形式上、小范圍的精簡,仍 未得到本質(zhì)上的精簡,即未找到更加簡單、更加高效、更加合理、更小占用的資源的算法。 2.程序仍然存在不合理的地方,例如程序某些部分輸入錯(cuò)誤會(huì)導(dǎo)致程序中止或轉(zhuǎn)向其他功能模塊,即程序建議用戶注意提示,進(jìn)行合理的準(zhǔn)確 的輸入,這樣更有利于管理工作。 3.程序功能仍然不夠完善。例如信息表達(dá)方式不豐富,比較單一,缺少圖片、音樂等元化表達(dá)方式。 C 語言課程設(shè)計(jì)報(bào)告 33 附錄(源程序代碼) #include stdio.h #include string.h #include stdlib.h #includemalloc.h void prin1(); void choose(); typedef struct subjects int num; /課程編號 char name20; /課程名稱 char kind10; /課程性質(zhì) int stime; /總學(xué)時(shí) int ttime; /授課學(xué)時(shí) int etime; /實(shí)驗(yàn)或上機(jī)學(xué)時(shí) int score; /學(xué)分 int term; /開課學(xué)期 struct subjects *next; SUB; SUB *head=NULL; SUB *create_form() /創(chuàng)建鏈表 SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name20,kind10; int size=sizeof(SUB); head=tail=NULL; printf(輸入選修課程信息 :n); C 語言課程設(shè)計(jì)報(bào)告 34 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; else tail-next=p; tail=p; scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term); tail-next=NULL; return head; void savefile() /保存文件 SUB *p; FILE *fp; C 語言課程設(shè)計(jì)報(bào)告 35 fp=fopen(2.txt,w); if(fp=NULL)exit(0); printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時(shí) 授課學(xué)時(shí) 實(shí)驗(yàn)或上機(jī)學(xué)時(shí) 學(xué)分 開課學(xué)期 n); for(p=head;p;p=p-next) fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(創(chuàng) 建后的信息已放入 2.txt文件中 n); system(pause); void savefile1() /保存文件 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%7dn,p-num,p-name,p-kind,p-stime,p-ttime,p-etime,p-score,p-term); fclose(fp); printf(創(chuàng)建后的信息已放入 3.txt文件中 n); system(pause); void readfile() /閱讀文件 C 語言課程設(shè)計(jì)報(bào)告 36 void *myInsert(SUB*); SUB *newSub; /新課程 int num,stime,ttime,etime; int score,term; char c,name20,ki

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論