第一篇:c語言課程設計 學生選修課程系統(tǒng)設計
題目:學生選修課程系統(tǒng)設計
功能:假定有n門課程,每門課程有課程編號,課程名稱,課程性質(zhì),總學時,授課學時,實驗或上機學時,學分,開課學期等信息。試設計一選修課程系統(tǒng)。
分步實施:
1、初步完成總體設計,搭好框架,確定人機對話界面,確定函數(shù)個數(shù);
2、建立一個文件,將每條記錄信息寫入文件中并能顯示于屏幕上
3、完成上述添加、查找(課程編號、課程名稱、課程性質(zhì)等)、修改等功能。
4、進一步要求:學生選修課程(可選項)
要求:
1、用C語言實現(xiàn)程序設計;
2、利用結(jié)構(gòu)體數(shù)組實現(xiàn)信息的數(shù)據(jù)結(jié)構(gòu)設計;
3、系統(tǒng)的各個功能模塊要求用函數(shù)的形式實現(xiàn);
4、界面友好(良好的人機交互),程序加必要的注釋。
課程設計實驗報告要求:
1、預習報告:題目、課程設計任務、數(shù)據(jù)結(jié)構(gòu)、程序的總體設計(算法)、模塊劃分。
2、實驗總結(jié)報告:流程圖、主要源程序代碼(需打?。y試情況及調(diào)試中問題與解決方案、小結(jié)等。
第二篇:C語言課程設計學生通訊錄管理系統(tǒng)設計
C語言課程設計學生通訊錄管理系統(tǒng)設計
一、題目內(nèi)容的描述
學生通訊錄管理系統(tǒng)設計
設計一個學生通信錄,學生通迅錄數(shù)據(jù)信息構(gòu)成內(nèi)容可自行設計(如:姓名、家庭地址、郵政編碼、電話號碼等等),通信錄數(shù)據(jù)類型定義為結(jié)構(gòu)體類型。由鍵盤輸入數(shù)據(jù)(最好要考慮輸入數(shù)據(jù)輸入的格式及輸入數(shù)據(jù)的有效性),然后進行以下的功能實現(xiàn)。程序要求主函數(shù)是一個功能選擇菜單,其它各功能都用各自的函數(shù)實現(xiàn)。
功能要求如下:
1、能建立、修改和增刪學生通訊錄
2、能夠按多種方式進行查詢,例如按姓名、按電話號碼等。
3、通訊錄的數(shù)據(jù)保存在文件中,運行程序時將通訊錄數(shù)據(jù)從文件讀取到內(nèi)存中。對通訊錄進行增加、刪除、修改學生數(shù)據(jù)后,提供功能菜單,可以將內(nèi)存中修改過的通訊錄重新保存至文件。
二、應用程序功能的詳細說明
1、應用程序?qū)崿F(xiàn)了可視化的系統(tǒng)操作界面。
2、對學生通訊錄形成了系統(tǒng)化的管理,操作簡便明了。
3、程序具有系統(tǒng)幫助,添加、顯示、查詢、刷新、刪除、排序、保存、修改、讀取學生通訊錄的功能。各項功能均可按照文字提示操作,淺顯易懂。
4、系統(tǒng)的各個功能模塊都用函數(shù)的形式來實現(xiàn)(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。
5.可以將信息保存在文件(“student.txt“)中,亦可將信息從文件中讀取出來,靈活方便。
三、主要模塊的算法描述
學生通訊錄管理系統(tǒng)
刷新學生信息readfile()
查詢學生信息seek()
增加學生信息insert()
顯示學生信息display()
退出系統(tǒng)
修改學生信息modify()
刪除學生信息del()
保存當前學生信息save()
匯總當前學生數(shù)目number()
系統(tǒng)幫助help()
查詢學生信息
按姓名查詢
退出
按學號查詢
開始
以可讀寫的方式打開一個數(shù)據(jù)文件
將此文件的內(nèi)容讀出,并存入一個新的結(jié)構(gòu)體類型的數(shù)組中。
調(diào)用menu()菜單函數(shù)
進入while()主循環(huán)
輸入1-8中的一數(shù)值,選擇相應操作。
輸入是否為0
判斷鍵值,調(diào)用相應函數(shù),完成相應功能。
是否已對修改存盤
調(diào)用函數(shù)save()函數(shù),進行寫數(shù)據(jù)文件操作
結(jié)束
模塊一:頭文件,變量定義,函數(shù)的聲明
對系統(tǒng)所使用的變量進行定義,對函數(shù)進行聲明。
模塊二:錄入學生信息
聲明函數(shù)void
readfile(),說明一個文件指針FILE
*fp打開文
件“student.txt“。
模塊三:學生信息的查找
聲明void
seek()為查找函數(shù),通過switch(item)設定用學號查找,用姓名查找兩個分支。
模塊四:學生信息的修改
聲明void
modify()為學生信息修改函數(shù),通過switch(item)設定
所要修改的項目。
模塊五:刷新學生信息
聲明void
sort()將錄入學生系按升序排列,用的是“冒泡排序法”
實現(xiàn)排序。
模塊六:增加學生信息
聲明void
insert()插入學生信息,先通過判斷學生是否存在,若
否則繼續(xù)輸入,若是則跳出,重新循環(huán)。
模塊七:刪除學生信息
聲明void
del()實現(xiàn)學生信息刪除,通過學號對比確定要刪除的信
息,然后用后一個替換掉。
模塊八:顯示學生信息
通過display()函數(shù)輸出學生信息。
模塊九:保存信息
通過fp=fopen(“student.txt“,“w“);寫入信息。
模塊十:匯總學生數(shù)目
通過number()函數(shù)將已有男女生及總學生數(shù)目匯總出來。
模塊十一:系統(tǒng)幫助
通過help()函數(shù)幫助操作。
模塊十二:界面菜單
通過switch(num)調(diào)用以上各函數(shù),實現(xiàn)功能。
1、程序采用模塊化設計,各模塊獨立,可分塊調(diào)試,個模塊由主函數(shù)控制調(diào)用。
2、其中主要模塊(readfile()、seek()、modify())都是利用數(shù)組,指針來實現(xiàn)數(shù)據(jù)結(jié)構(gòu)設計。
3、數(shù)據(jù)庫設計的任務是確定系統(tǒng)所需要的數(shù)據(jù)庫。數(shù)據(jù)庫是表的集合,通常一個系統(tǒng)只需一個數(shù)據(jù)庫。設計人
是根據(jù)需求分析,確定數(shù)據(jù)庫所包含的表及字段、表間的關(guān)系,然后具體確定表的結(jié)構(gòu),包括字段名、字段類型及寬度,需要的索引等。根據(jù)對需求得到的數(shù)據(jù)結(jié)構(gòu)進行分析,按數(shù)據(jù)輸入輸出的要求,確定表和表間的關(guān)系,進行驗證、調(diào)整、修改、完善,使其能夠?qū)崿F(xiàn)用戶對數(shù)據(jù)和功能的要求。通訊信息表包括以下字段:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail。學號為主索引。
四、結(jié)束語
我設計的程序總體功能大都能夠運行順利,但有許多地方比較復雜,需要進一步修改,進行簡化。通過這次課程設計的鍛煉,我收獲很多,具體歸納為以下幾點:
1、首先,也是最重要的一點,學會如何將一個復雜的問題簡化,將一個較大的問題分成幾個小問題,再一一解決這些小問題。在設計一個程序之前,要學會對程序功能進行規(guī)劃,將其分為幾個不同的功能模塊,要思路清晰,簡單易用;
2、學會靈活運用已有的知識,同時適當?shù)耐卣挂恍┲R;比如,這次設計過程中,有一些函數(shù)以前就很少用到,甚至沒有見過,但對程序的設計及用戶界面的改善帶來方便;
3、解決問題時,要盡可能考慮全面。每一個細節(jié)都很重要,既要避免功能的重復,也要避免功能疏漏的地方!
4、在這次課程設計過程中,參考了許多資料,發(fā)現(xiàn)C語言真的很有意思!比如我看到一個關(guān)于用C語言編寫的小程序:五子棋、俄羅斯方塊、推箱子等,等這次課程結(jié)束后,我就想利用C語言編寫這些小游戲。曾經(jīng)認為C是個挺枯燥的課程,現(xiàn)在發(fā)現(xiàn)這不僅僅是個簡單的課程,而是個很實用的計算機工具!
五、程序源代碼清單
#include
#include
#include
#define
BUFLEN
#define
LEN
#define
N
struct
record
{
char
code[LEN+1];
char
name[LEN+1];
int
age;
char
sex[3];
char
time[LEN+1];
char
add[30];
char
tel[LEN+1];
char
mail[30];
}stu[N];
int
k=1,n,m;
void
readfile();
void
seek();
void
modify();
void
insert();
void
del();
void
display();
void
save();
void
number();
void
menu();
int
main()
{
while(k)
menu();
system(“pause“);
return
0;
}
void
readfile()//刷新學生信息
{
char
*p=“student.txt“;
FILE
*fp;
int
i=0;
if
((fp=fopen(“student.txt“,“r“))==NULL)
{
printf(“Open
file
%s
error!
Strike
any
key
to
exit!“,p);
system(“pause“);
exit(0);
}
while(fscanf(fp,“%s
%s%d%s
%s
%s
%s
%s“,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf(“錄入完畢?。躰“);
}
void
seek()//查詢學生信息
......void
modify()//修改學生信息
......void
sort()//對學生信息按學號排序
{
int
i,j,*p,*q,s;
char
temp[10];
for(i=0;i { for(j=n-1;j>i;j--) if(strcmp(stu[j-1].code,stu[j].code)>0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail,stu[j].mail); strcpy(stu[j].mail,temp); p=&stu[j-1].age; q=&stu[j].age; s=*q; *q=*p; *p=s; } } } void insert()//增加學生信息 ......void display()//顯示當前學生信息 { int i; printf(“所有學生的信息為:\n“); printf(“學生學號,學生姓名,年齡,性別,出生年月,地址,電話,E-mail\n“); printf(“--------------------------------------------------------------------\n“); for(i=0;i { printf(“%6s,%7s,%5d,%5s,%9s,%8s,%10s,%14s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } } void save()//保存當前學生信息 { int i; FILE *fp; fp=fopen(“student.txt“,“w“); for(i=0;i { fprintf(fp,“%s,%s,%d,%s,%s,%s,%s,%s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } fclose(fp); } void number()//匯總學生數(shù)目 { int i,girl,boy=0; for(i=0;i if(strcmp(stu[i].sex,“1“)==0) {boy++;} girl=n-boy; printf(“男生人數(shù)是:%d\n女生的人數(shù)是:%d\n“,boy,girl); printf(“總的學生人數(shù)為:%d“,n); } void help()//系統(tǒng)幫助 { printf(“輸入性別時男為1,女為2“); printf(“\n3.增加學生信息后,切記保存按7;\n“); printf(“\n4.謝謝您的使用?。躰“); } void menu()//可視化的系統(tǒng)操作界面 { int num; printf(“ \n\n 學生通訊錄管理系統(tǒng) \n\n“); printf(“ *********************系統(tǒng)功能菜單************************ \n“); printf(“ -------------------------------- ------------------------------- \n“); printf(“ 1.刷新學生信息 2.查詢學生信息 \n“); printf(“ ********************************************* \n“); printf(“ 3.修改學生信息 4.增加學生信息 \n“); printf(“ ********************************************* \n“); printf(“ 5.按學號刪除信息 6.顯示當前信息 \n“); printf(“ ********************************************* \n“); printf(“ 7.保存當前學生信息 8.匯總學生數(shù)目 \n“); printf(“ ********************************************* \n“); printf(“ 9.系統(tǒng)幫助 10.退出系統(tǒng) \n“); printf(“ --------------------------------- ------------------------------ \n“); printf(“ ************************************************************ \n“); printf(“請選擇菜單編號:“); scanf(“%d“,&num); switch(num) { case 1:readfile();break; case 2:seek();break; case 3:modify();break; case 4:insert();break; case 5:del();break; case 6:display();break; case 7:save();break; case 8:number();break; case 9:help();break; case 10:k=0;break; default:printf(“請在1-10之間選擇\n“); } } 題目 一、學生選課管理系統(tǒng) 第一部分:課程設計名稱、目的、要求 第二部分:程序總體設計思路 第三部分:程序功能劃分、圖示及流程圖 第四部分:程序設計數(shù)據(jù)、運行結(jié)果 第五部分:程序的優(yōu)缺點 第六部分:心得體會 第七部分:附錄(源程序) 第八部分:附錄(參考文獻) 目錄 ..............................................................................第一部分:課程設計名稱、目的、要求 名稱:學生選修課程系統(tǒng)設計 目的:運用C語言提高解決實際問題的能力 實驗環(huán)境:Microsoft Visual C++ 6.0 內(nèi)容: 假定有n門課程,每門課程有課程編號,課程名稱,課程性質(zhì),總學時,授課學時,實驗或上機學時,學分,開課學期等信息,學生可按要求(如總學分不得少于60)自由選課?!竟δ堋?/p> 系統(tǒng)以菜單方式工作? 課程信息錄入功能(課程信息用文件保存)--輸入? 課程信息瀏覽功能--輸出? 查詢功能:(至少一種查詢方式)--算法? 按學分查詢? 按課程性質(zhì)查詢? 學生選修課程(可選項)? 第二部分:程序總體設計思路 由于C語言是面對過程的語言,故我的設計思路是根據(jù)目標程序運行的過程來編寫的。 具體的設計思路如下: 程序的要求是設計學生選修課管理系統(tǒng),對選修課程能夠進行錄入和修改操作等,要求有菜單界面和退出功能。首先,考慮到程序的數(shù)據(jù)輸入,可以設置一個管理員登陸選項,通過該選項進入管理員界面,進行選修課的錄入和修改操作,最后將錄入的課程保存到相應的文件中。然后定義各種函數(shù)的功能包括查看,查詢,刪除等。另一個為學生登陸界面,該界面學生可以進行課程選擇和瀏覽查詢等操作。在進行該操作之前需要對管理員保存的文件進行讀取,然后對其中的內(nèi)容進行查詢等,在學生選好課程以后,可以將其選好的課程保存于相應的文件中,以便下次進行修改。通過函數(shù)的層層調(diào)用來實現(xiàn)程序的邏輯結(jié)構(gòu)。中間通過文件的打開和關(guān)閉實現(xiàn)對文件內(nèi)部所包含的數(shù)據(jù)的操作。 整個程序的設計思路到此結(jié)束。 第三部分:程序功能劃分、圖示及流程圖 【功能模塊劃分及其流程圖】 本程序功能模塊根據(jù)程序設計的需求,綜合程序的實用性、人性化、智能化的考慮,將程序劃分為6個部分分別編寫,程序主體功能將由這9個部分來完成。這9個部分依次是: 1.登錄界面函數(shù);void login()2.學生登錄界面據(jù)函數(shù):void stu_login()3.管理員登錄界面函數(shù):void man_login()4.退出界面函數(shù):void bye_sys() 5.課程選擇函數(shù):void c_select()6.課程瀏覽函數(shù):void c_view()7.課程查詢函數(shù):void c_search()8.課程增加函數(shù):void c_add()9.課程刪除函數(shù):void c_delete()10.菜單函數(shù):void index()11.主函數(shù)部分; main() 總體設計: 學生選課系統(tǒng)管理員登錄學生登錄新增課程刪除課程課程瀏覽查詢課程學生選課課程瀏覽課程查詢c_add函數(shù)c_delete函數(shù)c_view函數(shù)c_search函數(shù)c_select函數(shù)c_view函數(shù)c_search函數(shù) 系統(tǒng)功能模塊圖 部分函數(shù)流程圖: 1、課程選擇函數(shù): 開始輸入要選擇的課程的編號j=0;j 2、課程查詢函數(shù) 開始輸入要查詢的課程的編號j=0;j 3、課程增加函數(shù) 開始輸入要增加的課程的編號j=0;j 4、課程刪除函數(shù) 開始輸入要刪除的課程的編號nj=0;j 本程序是一款應用軟件,故數(shù)據(jù)設計、程序運行結(jié)果應在程序的 運用中得以體現(xiàn),現(xiàn)在通過一個程序的運用事例來對程序運行結(jié)果進行演示與實現(xiàn)。【軟件運用舉例】 1、程序開始界面如下: 選擇某個選項,如進行管理員登錄,進行課程的增加 進入管理員界面: 2、再選擇所要進行的操作,如進行課程增加,結(jié)果如下: 下面可以進行繼續(xù)增加課程或者退出: 3、選擇課程瀏覽,可以分頁查看相應的課程信息: 第一頁: 第二頁: 4、課程查詢 查找結(jié)果: 4、管理員課程刪除操作: 刪除后可以進行瀏覽,觀察刪除后的結(jié)果: 可見刪除后只有一條記錄。刪除操作完成正確。下面進行學生操作的使用方法: 1、學生登陸界面: 2、選擇學生選課選項: 3、學生登陸也可進行課程瀏覽和查詢函數(shù),其結(jié)果與管理員登陸相同,不再演示。 第五部分:程序的優(yōu)缺點 【程序的優(yōu)點】 算法是程序的靈魂,程序的優(yōu)點首先表現(xiàn)在算法上的優(yōu)點,其次才是功能上的。 [算法上的優(yōu)點]主要體現(xiàn)在以下三點: 1.程序采用main主函數(shù)方式設計,程序的主體的功能大都由該功能 完成。程序如此設計有利于程序的進一步改進及有助于程序執(zhí)行效率的提高。 2.程序?qū)ξ募?shù)據(jù)的讀寫采用了fread和fwrite塊讀寫函數(shù),能夠?qū)⑽募械臄?shù)據(jù)完全讀出,然后賦到定義的數(shù)組中,再在相應的數(shù)組中進行一系列操作,最終再寫入文件。 3.插入操作在本程序中將課程信息直接插入數(shù)組最后一個節(jié)點,從而減少了數(shù)據(jù)的相互移動,節(jié)省了時間。 [功能上的優(yōu)點] 主要體現(xiàn)在以下兩點: 1. 簡潔明了的程序菜單。程序主要采用了層次不同的菜單,相互獨立又相互聯(lián)系,巧妙相接,符合用戶的使用習慣與思維。2. 人性化的程序提示語言,程序提示語言較人性化,不僅大多為祈使語句、疑問句,而且提示明確,具有較強的明確的指導作用。程序提示不僅層次分明,提示方式多樣,而且提示信息井然有序,更加有利于用戶順利、準確地看懂程序并進行操作。 【程序的缺點】 主要表現(xiàn)在以下兩點: 1、本程序沒有進行相應的密碼操作,所以對于使用者來說可能存在比較大的不保密性。需要改善。 2、本程序沒有使用文本讀寫函數(shù)fscanf和fprintf,所以的到的課程文件和選課文件都是二進制形式。 第六部分:心得體會 選課系統(tǒng)程序比起通訊錄程序來講好寫一些,由于本程序用到了數(shù)組,對于數(shù)組的操作掌握的比較熟練,所以在編寫程序的時候困難沒有那么多。 本程序在編寫的過程中用到了許多通訊錄中的模塊化設計和函數(shù)互相調(diào)用的思想,使得編寫比較方便和好用。 通過該系統(tǒng)的課程設計分析,我掌握了模塊化設計的方法,理解和運用了結(jié)構(gòu)化程序設計的思想和方法,掌握和提高了運用C語言進行程序設計的能力。 程序設計的過程,實際上是確定解決問題的詳細步驟,而這個步驟通常叫做流程,在程序設計過程中理清楚整個問題的流程很重要,然后采取逐步細化的方法實現(xiàn)整個程序。 對于一個較大的應用程序,一般不可能一次就設計出一個很完善的系統(tǒng)。通常要先設計滿足基本要求的系統(tǒng),然后再測試或者在使用的過程中不斷完善,慢慢地做成一個功能很完善選修課程管理系統(tǒng)。所以在進行調(diào)試的時候需要對許多變量理解和掌握其變化規(guī)律等,這對于我更好的掌握visual C中調(diào)試的工具有很大的幫助。 總之經(jīng)過這次課程設計,我對c語言的使用和理解都有了很大的加深,對于編程的思想也有了很多新的理解和感受。 第七部分:附錄 一、參考文獻: 1、李麗娟主編,C語言程序設計教程(第二版),人民郵電出版社 2、嚴蔚敏主編,數(shù)據(jù)結(jié)構(gòu)(C語言),清華大學出版社 3、崔單主編,C語言程序設計案例精粹,電子工業(yè)出版社 4、譚浩強主編,程序設計(第三版),清華大學出版社 二、源程序 #include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h” void index();//首頁 void login();void bye_sys();//退出界面 void stu_login();//學生登錄菜單 void c_select();void c_view();//課程瀏覽 void c_add();//增加課程 void c_delete();void c_searchs();//學生查詢函數(shù) void c_searchm();//管理員查詢函數(shù) void c_viewm();//管理員瀏覽函數(shù) void c_views();//學生瀏覽函數(shù) struct course//定義課程結(jié)構(gòu)體 { int c_num; char c_name[20]; int c_score; int c_nelepeo;//課程已選人數(shù) int c_melepeo;//課程人數(shù)上限 };struct student { char s_number[10]; char s_password[10];};struct manager { char m_name[10];char m_password[10];}; void index()//首頁 { char input; printf(“nnttt*****************************n”); printf(“ttt 湖南大學學生選課系統(tǒng)n”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt**********設計者:劉曉斌******nnn”); input=getchar(); system(“cls”);} void login()//登陸界面 { void stu_login(); void man_login(); void bye_sys(); int input; do { system(“cls”); printf(“nnnt1.學生登錄n”); printf(“t2.管理員登陸n”); printf(“t3.退出本系統(tǒng)n”); printf(“t請選擇服務類別:”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3)//輸入數(shù)不等于選項的時候打印畫面 { printf(“nt輸入出錯!請重新選擇~n”); printf(“nt按任意鍵返回選擇頁面~nt”); getchar();getchar(); system(“cls”); } if(input==3)//如果輸入3退出系統(tǒng) { bye_sys(); } }while(input!=1&&input!=2&&input!=3); switch(input) { case 1:stu_login();break; case 2:man_login();break; } } void bye_sys()//退出界面 { exit(0);} void man_login(){ void c_add(); void c_delete(); void c_view(); void c_searchm(); int in; do { system(“cls”); printf(“nnt1.新增課程n”); printf(“t2.刪除課程n”); printf(“t3.課程瀏覽n”); printf(“t4.課程查詢n”); printf(“t5.退出n”); printf(“nnt請選擇服務種類:”); scanf(“%d”,&in); if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5) { printf(“nt沒有這項服務t按任意重新選擇”); getchar();getchar(); } }while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5); switch(in) { case 1:c_add();break; case 2:c_delete();break; case 3:c_viewm();break; case 4:c_searchm();break; case 5:login();break; } } void stu_login()//學生登錄菜單 { void c_select(); void c_view(); void c_searchs(); void login(); int input; do { system(“cls”); printf(“nnnt--學生登陸--”); printf(“nnt1.學生選課n”); printf(“t2.課程瀏覽n”); printf(“t3.課程查詢n”); printf(“t4.退出n”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3&&input!=4) { printf(“nt沒有這項服務~n”); printf(“t按任意鍵重新選擇”); getchar(); getchar(); } }while(input!=1&&input!=2&&input!=3&&input!=4); switch(input) { case 1:c_select();break; case 2:c_views();break; case 3:c_searchs();break; case 4:login();break; } } void c_select(){ int n,in,i=0,j;int flag=0; FILE *fp; FILE *fp1; char input; struct course courses[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判斷是否存在課程 { printf(“nnnt課程不存在nn”); printf(“t<按任意鍵返回管理菜單>nt”); input=getchar(); input=getchar(); stu_login();//進入學生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 } printf(“nntt請輸入你要選課程的編號:”); scanf(“%d”,&n); if((fp1=fopen(“courseselect.dat”,“rb”))==NULL) { fp1=fopen(“courseselect.dat”,“wb”); } else { fclose(fp1); fp1=fopen(“courseselect.dat”,“ab”); } for(j=0;j if(courses[j].c_num==n) flag++; if(flag==0) { printf(“nntt不存在對應課程n”); printf(“nntt繼續(xù)選課請按1,退出請按2:n”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default: printf(“輸入錯誤,將返回登錄界面!n”); login();break; } } else { fwrite(&courses[j],sizeof(struct course),1,fp1); fclose(fp1); printf(“nntt選課成功t請選擇:”); printf(“nntt1.繼續(xù)選課”); printf(“nntt2.退出,返回登錄界面!”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default:break; } } } void c_viewm()//課程瀏覽 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判斷是否存在課程 { system(“cls”); printf(“nnnt課程不存在nn”); printf(“t<按任意鍵返回管理菜單>nt”); getchar();getchar(); stu_login();//進入學生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 do { system(“cls”); if(i==1) { printf(“nnnttt沒有記錄!n”); getchar();getchar(); man_login(); } else { printf(“nt------共有%d條記錄-------”,i-1); printf(“nnt課程編號: %dn”,courseview[n].c_num); printf(“nnt課程名字: %sn”,courseview[n].c_name); printf(“nnt課程學分: %dn”,courseview[n].c_score); printf(“nnt課程已選人數(shù): %dn”,courseview[n].c_nelepeo); printf(“nnt課程人數(shù)上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一頁t2.下一頁t3.回目錄”); printf(“n請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到達首頁 t按任意鍵返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到達尾頁t按人意見返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{man_login();break;} default: { printf(“nt操作錯誤t按任意鍵返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_views()//課程瀏覽 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判斷是否存在課程 { system(“cls”); printf(“nnnt課程不存在nn”); printf(“t<按任意鍵返回管理菜單>nt”); getchar();getchar(); stu_login();//進入學生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 do { system(“cls”); if(i==1) { printf(“nnnttt沒有記錄!n”); getchar();getchar(); stu_login(); } else { printf(“nt------共有%d條記錄-------”,i-1); printf(“nnt課程編號: %dn”,courseview[n].c_num); printf(“nnt課程名字: %sn”,courseview[n].c_name); printf(“nnt課程學分: %dn”,courseview[n].c_score); printf(“nnt課程已選人數(shù): %dn”,courseview[n].c_nelepeo); printf(“nnt課程人數(shù)上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一頁t2.下一頁t3.回目錄”); printf(“n請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到達首頁 t按任意鍵返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到達尾頁t按人意見返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{stu_login();break;} default: { printf(“nt操作錯誤t按任意鍵返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_searchs(){ void stu_login(); void c_searchs(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判斷課程信息是否存在 { system(“cls”); printf(“nnt課程不存在t按任意鍵返回”); getchar();getchar(); stu_login(); } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt請輸入你要查詢的課程編號:”); scanf(“%d”,&id); do//檢查輸入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt課程編號:%dn”,coursesear[k].c_num); printf(“nnt課程名字:%sn”,coursesear[k].c_name); printf(“nnt課程學分:%dn”,coursesear[k].c_score); printf(“nnt課程已選人數(shù):%dn”,coursesear[k].c_nelepeo); printf(“nnt課程人數(shù)上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt沒有這項服務t請按任意鍵重新輸入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在對應記錄n”); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt沒有這項服務t請按任意鍵重新輸入”); getchar();getchar(); } } } }while(inp!=1); } void c_searchm(){ void stu_login(); void c_searchm(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判斷課程信息是否存在 { system(“cls”); printf(“nnt課程不存在t按任意鍵返回”); getchar();getchar(); stu_login(); } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt請輸入你要查詢的課程編號:”); scanf(“%d”,&id); do//檢查輸入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt課程編號:%dn”,coursesear[k].c_num); printf(“nnt課程名字:%sn”,coursesear[k].c_name); printf(“nnt課程學分:%dn”,coursesear[k].c_score); printf(“nnt課程已選人數(shù):%dn”,coursesear[k].c_nelepeo); printf(“nnt課程人數(shù)上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt沒有這項服務t請按任意鍵重新輸入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在對應記錄n”); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt沒有這項服務t請按任意鍵重新輸入”); getchar();getchar(); } } } }while(inp!=1);} void c_add()//增加課程 { void c_add(); void man_login(); int i=0,j,inp; FILE *fp; struct course course_new; struct course courses[10]; system(“cls”); printf(“nntt請輸入課程信息”); printf(“nntt1.課程編號:”); scanf(“%d”,&course_new.c_num); printf(“nntt2.課程名字:”); scanf(“%s”,course_new.c_name); printf(“nntt3.課程學分:”); scanf(“%d”,&course_new.c_score); printf(“nntt4.課程已選人數(shù):”); scanf(“%d”,&course_new.c_nelepeo); printf(“nntt5.課程人數(shù)上限:”); scanf(“%d”,&course_new.c_melepeo); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); for(j=0;j<=i-1;j++) if(course_new.c_num==courses[j].c_num) { system(“cls”); printf(“nnttt對不起,這個編號已經(jīng)使用過nntt按任意鍵返回管理菜單”); getchar();getchar(); man_login(); break; } } if((fp=fopen(“course.dat”,“rb”))==NULL) { fp=fopen(“course.dat”,“wb”); } else { fclose(fp); fp=fopen(“course.dat”,“ab”); } fwrite(&course_new,sizeof(struct course),1,fp); fclose(fp); printf(“nntt信息輸入完畢t按任意鍵繼續(xù)”); getchar();getchar(); do { system(“cls”); printf(“nntt1.繼續(xù)輸入”); printf(“nntt2.返回管理菜單”); printf(“nntt請選擇”); scanf(“%d”,&inp); if(inp!=1&&inp!=2) { printf(“輸入不符合要求t按任意鍵重新選擇”); getchar();getchar(); } }while(inp!=1&&inp!=2); switch(inp) { case 1:c_add();break; case 2:man_login();break; } } void c_delete()//查詢后刪除 { FILE *fp; int i=0,j,n,k,flag=0; struct course courses[10]; void c_delete(); void man_login(); printf(“nntt請輸入你要刪除的課程編號:”); scanf(“%d”,&n); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } else { printf(“nntt不存在任何課程t按任意鍵返回”); getchar();getchar(); man_login(); } for(j=0;j { if(courses[j].c_num==n) { flag=1; fp=fopen(“course.dat”,“wb”); for(k=0;k fwrite(&courses[k],sizeof(struct course),1,fp); fclose(fp); fp=fopen(“course.dat”,“ab”); for(k=j+1;k { fwrite(&courses[k],sizeof(struct course),1,fp); } printf(“nntt記錄已刪除!t按任意鍵返回ntt”); getchar();getchar(); man_login(); fclose(fp); } } if(flag==0) { printf(“nntt不存在對應的課程t按任意鍵返回”); getchar();getchar(); man_login(); } // printf(“nntt記錄已刪除!t按任意鍵返回ntt”); } int main(){ index();login();return 0;} 1、課程設計的目的、任務 《匯編語言》課程設計對于鞏固匯編語言理論知識,加強學生的實際動手能力和提高學生綜合素質(zhì)十分必要。課程設計的目的主要是通過程序設計方法和技能的基本訓練,鞏固在課堂上學到的有關(guān)程序設計的基本知識和基本方法,通過實際動手能力的培養(yǎng),進一步熟悉匯編語言的結(jié)構(gòu)和使用方法,達到能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。 2、軟件需求分析和設計 2.1學生成績管理系統(tǒng)是對學生成績的管理,其中包括以下幾個模塊:(1).插入一個數(shù)據(jù)(插入學生學號以及語數(shù)外三個成績)。(2)修改一個數(shù)據(jù)。(3)刪除學生成績數(shù)據(jù)。(4)查找學生成績。(5)查看學生成績的排名(6)查看學生成績分布(7)按esc鍵退出系統(tǒng) 2.2學生成績管理系統(tǒng)應該包含以下信息:學號,語文成績,英語成績,數(shù)學成績。因此,系統(tǒng)應該提供以下功能:(1)輸出顯示菜單。(2)輸入學生的成績(3)修改學生成績(4)刪除學生成績(5)查詢學生成績(6)顯示學生成績排名(7)顯示成績分布統(tǒng)計(8)按esc鍵退出系統(tǒng) 2.3依據(jù)程序的功能需求,該系統(tǒng)的功能結(jié)構(gòu)圖如下 系統(tǒng)功能結(jié)構(gòu)圖 2.4 程序流程圖: 主程序流程圖 查找學生成績 插入學生學號及成績 修改學生的成績 顯示各個學科各分數(shù)段的人數(shù) 3、程序?qū)崿F(xiàn)說明 3.1學生管理系統(tǒng)中各子程序如下: (1).輸入全部學生學號以及語文,英語,數(shù)學三科的成績。子程序名:insert 子程序描述:該子程序為輸入字程序。系統(tǒng)在開始的時候是沒有數(shù)據(jù)的,通過該子程序可以初始化系統(tǒng),將學生的學號及成績輸入系統(tǒng)。 代碼: insert proc near;定義進程子程序:插入學生,學號及 成績 call input;調(diào)用input add n,1 ret insert endp (2).修改輸入的成績。子程序名:modify 子程序描述:通過子程序修改學生的成績 代碼: modify proc near;定義進程子程序:修改學生學號,成績 md1:output mess1;輸出mess1 shuru;調(diào)用宏shuru:二位數(shù)據(jù)輸入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找輸入的學生是否存在 je qq1_1;查到的話,就跳轉(zhuǎn)到qq1_1輸入修改的值,也就是重新輸入。;結(jié)果相等則跳轉(zhuǎn)到qq1_1 add si,1 cmp si,bx jbe md;小于等于則跳轉(zhuǎn)到md output mess;輸出mess jmp md1;不相等繼續(xù)輸入學號 qq1_1:;轉(zhuǎn)入修改的值重新輸入。mov di,si output mess2 output mess4 mov si,0 mov cx,3 qq3_1:shuruu;cmp dx,78h; jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1] 分別輸入語文,英語,數(shù)學成績,并將其放 在緩沖區(qū)buf中 比較輸入的成績是否大于120,如果大于120的 話,那么重 新輸入成績 小于等于則轉(zhuǎn)移到qq2_1 輸出ts3 跳轉(zhuǎn)到qq1_1 輸出空格 將存入buf中的成績,分別賦值給存放對應科 目的成績的數(shù)組 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).刪除學生的成績。子程序名:delete 子程序描述:通過子程序刪除學生的成績 代碼: de proc near;刪除某個學生的記錄 sc1:output mess1 shuru;調(diào)用宏shuru,接受輸入的學號 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查詢輸入學號的學生信息是否存在,不存在的話,重新輸入學號 je sc2;相等則轉(zhuǎn)移到sc2 add si,1 cmp si,bx jbe sc;小于等于則轉(zhuǎn)移到sc output mess;輸出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等則轉(zhuǎn)移到sc3 mov cx,bx sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循環(huán)指令,執(zhí)行操作(cx)<--(cx)-1.若 cx!=0,跳轉(zhuǎn)到標號sc處循環(huán)執(zhí)行;cx=0,則推出 循環(huán),執(zhí)行l(wèi)oop的下一條指令 sub n,1 sc3: ret de endp (3).查詢學生的成績。子程序名:find 子程序描述:通過子程序查詢學生的成績 代碼: find proc near;定義進程子程序:查找學生成績 call sum;求學生的總成績 call ping;求學生的平均成績 bj1:output mess1;輸出mess1 shuru;二位數(shù)數(shù)據(jù)輸入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];將輸入的學號與輸入的學號相比,je i;存在的話,將此學生的成績輸出。je表示結(jié)果相 等則轉(zhuǎn)移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg mov al,mat[si] cbw shuzii ax output bg; mov al,pj[si] cbw 小于等于則轉(zhuǎn)移到bj 為二位數(shù)據(jù)輸出 輸出空格 將字節(jié)變?yōu)樽?/p> 為三位數(shù)據(jù)輸出。輸出空格 將字節(jié)變?yōu)樽?/p> 為三位數(shù)據(jù)輸出 輸出空格的字符串,用于與標題欄對齊 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii為三位數(shù)據(jù)輸出 output bg;輸出空格的字符串,用于與標題欄對齊 shuzi mc[si];shuzi為二位數(shù)據(jù)輸出 ret find endp (4).顯示學生的成績排名。子程序名:show 子程序描述:通過子程序顯示學生的成績排名 代碼: show proc near;定義進程子程序:顯示結(jié)果排名 call sum;調(diào)用宏sum call ping;調(diào)用宏ping call rank;調(diào)用宏rank call shuchu;調(diào)用宏shuchu ret show endp 3.2程序運行抓圖: 主菜單 修改學生成績 刪除學生成績 顯示各個學科各分數(shù)段的人數(shù) 4、程序總結(jié) 通過兩個星期的學習,努力,終于完成了報告。系統(tǒng)可以很好的運行。這兩個多星期的時間,幾乎每天不是在敲代碼,就是在看代碼,查書,上網(wǎng)。系統(tǒng)中用到了很多最近才學習的知識,比如宏,子程序。這些都使得代碼的運行效率提高了,代碼行數(shù)減少了。系統(tǒng)還用到了bios的清屏功能。這些功能如果不是做課程設計,我想我很難會接觸到這些知識。 由于自己對知識掌握的不是很牢固,其中也會碰到一些困難。每當遇到問題的時候,我會先上網(wǎng)去查找,看看有沒有人提過這方面的問題。互聯(lián)網(wǎng)是強大的,大部分的問題通過網(wǎng)絡都可以解決。部分找不到的問題,我就去請教班里學得好的同學。他們對知識的掌握遠超過我。這樣下來,很多問題都迎刃而解了。 課程設計是一個很好的掌握書本上知識的過程。平時上課之后,自己都不會想著去敲一些代碼聯(lián)系聯(lián)系。通過做課程設計,將理論與實踐結(jié)合了起來,對知識的理解更加深入了。 課程設計題目:簡單的學生成績管理的程序 要求: 一、由鍵盤輸入原始數(shù)據(jù)。原始數(shù)據(jù)內(nèi)容如下: 學號姓名C程序設計高等數(shù)學英語線性代數(shù) 1王..80808080 2張..90909090 注:要求至少有20個學生的原始數(shù)據(jù) 二、實現(xiàn)以下功能。 程序要求主函數(shù)是一個功能選擇菜單,其它各功能用函數(shù)實現(xiàn)。功能要求如下: 1、原始數(shù)據(jù)的輸入 2、計算每位同學的平均分 3、計算每門課程的平均分 4、計算各分數(shù)段(90-100、80-89、60-79、60以下)的人數(shù) 5、對這些同學的成績按平均分排序,給出名次。 6、對原始數(shù)據(jù)可以進行增、刪、改的編輯操作。 7、按學號查詢學生。找到則顯示該生信息,否則提示未找到。 8、原始數(shù)據(jù)可以保存為文件,也可以從文件載入。 注:程序統(tǒng)計輸出結(jié)果如下: 學號姓名C程序設計高等數(shù)學英語線性代數(shù)平均分名次 1王..80808080802 2張..90909090901 … 各科平均分8585858585 C程序設計高等數(shù)學英語線性代數(shù)平均分 90-10011111 80-8911111 60-6900000 60以下00000第三篇:C語言課程設計學生選課系統(tǒng)
第四篇:語言課程設計-學生成績管理系統(tǒng)
第五篇:C語言課程設計任務書(學生成績管理系統(tǒng))