《C++課程設(shè)計(jì)報(bào)告--學(xué)籍管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《C++課程設(shè)計(jì)報(bào)告--學(xué)籍管理系統(tǒng)(17頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、
課程設(shè)計(jì)報(bào)告
題 目 學(xué)籍管理系統(tǒng)
課 程 名 稱 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)
院 部 名 稱 軟件學(xué)院
專 業(yè) 數(shù)字媒體技術(shù)
班 級 1222202
學(xué) 生 姓 名 張吉發(fā)
學(xué) 號 201220220203
課程設(shè)計(jì)地點(diǎn) 軟件樓
課程設(shè)計(jì)學(xué)時(shí) 16
指 導(dǎo) 教 師
2、 鄒國華
一 需求分析
隨著計(jì)算機(jī)的發(fā)展,越來越多的學(xué)校有自己的學(xué)籍管理系統(tǒng)。這樣更方便數(shù)據(jù)的長期保存,更適用于數(shù)據(jù)的集中處理。通過這個(gè)簡單的學(xué)籍管理系統(tǒng),可以添加新成員的基本信息,通過其姓名,性別,科目,分?jǐn)?shù)等信息查詢這個(gè)人的基本信息。可以很方便的進(jìn)行數(shù)據(jù)修改,以及數(shù)據(jù)刪除。本系統(tǒng)主要是通過二進(jìn)制的文件讀取,進(jìn)行輸入,輸出,以及修改,刪除等基本功能。用結(jié)構(gòu)體實(shí)行學(xué)生的基本信息。
結(jié)構(gòu)體student
數(shù)據(jù)成員:
1. 姓名 name
2. 學(xué)號 num
3. 語文 Chinese
4. 數(shù)學(xué)
3、math
.二 概要設(shè)計(jì)
struct student
{
char name[60];
char num[20];
int score;
char sex[30];
};
這個(gè)結(jié)構(gòu)體設(shè)計(jì)的很簡單,里面有四個(gè)數(shù)據(jù)成員。包括了學(xué)生的基本信息,姓名name用多字符來保存,學(xué)好num用多字符類型,分?jǐn)?shù)score用整數(shù)定義,性別用多字符類定義。
為了可以對數(shù)據(jù)進(jìn)行操作,處理。我們這里用了很多函數(shù)。
int dq(struct student st[]);
void xianshi();//顯示主界面
void bc(struct student st[]);//保存
4、學(xué)生信息
void add(); //添加學(xué)生的信息
void select();//查看學(xué)生信息
void chazhao();//查找
void xhcz();//學(xué)號查找
void xmcz();//姓名查找
void del();//刪除,里面提供了兩個(gè)函數(shù)實(shí)現(xiàn)按學(xué)號void xhsc();或是姓名void xmsc();查找來刪除
void xmsc();//姓名刪除
void xhsc();//學(xué)號刪除
void tj();//統(tǒng)計(jì)分?jǐn)?shù),求出總分和平均分
void px();//排序
void bjg();
void bca();//打印出文件的保存
5、字樣
void fh();//文件顯示提醒
struct student st[300]; //這個(gè)數(shù)組用來保存所有的學(xué)生信息 和文件里面的一致
int Number=0; //記錄總的學(xué)生人數(shù) 也就是數(shù)組/文件里面的學(xué)生人數(shù)
主函數(shù)的流程圖:
創(chuàng)建一個(gè)文件夾,用結(jié)構(gòu)體student輸入信息
顯示菜單,把系統(tǒng)功能界面給用戶
用戶輸入序號,根據(jù)輸入進(jìn)行操作
輸入0,結(jié)束
第一次沒有文件,判斷是否創(chuàng)建文件?
開始
.三 詳細(xì)的設(shè)計(jì)。
主函數(shù)void main()
這里默認(rèn)的查查在F盤是否有一個(gè)文件,student。如果有就直接在原有的基礎(chǔ)上添加或是修改信息。沒
6、有就建立一個(gè)文件在磁盤中 。編輯主頁面的鏈接。
主要有八個(gè)功能:
1添加學(xué)生的信息
2查看學(xué)生的信息
3查找學(xué)生的信息
4刪除學(xué)生的信息
5統(tǒng)計(jì)(總成績和平均分)
6輸出前N名學(xué)生的成績
7保存文件
0退出系統(tǒng)
用switch語句來實(shí)現(xiàn)對應(yīng)的鏈接
具體核心代碼如下:
void main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;
if((fp=fopen("F://student.dat","rb"))==NULL)
{
cout<<("\n=========>提示:文件不存在,是否要?jiǎng)?chuàng)建一個(gè)?(y/n
7、)\n");
cin>>yesorno;
if(yesorno=='y'||yesorno=='Y')
{
//這里僅為了建立文件,默認(rèn)的地址在
fp=fopen("F://student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(st); //要是文件只能夠已經(jīng)有數(shù)據(jù) 將數(shù)據(jù)初始化到數(shù)組中
}
system("cls");
while(true)
{
xianshi();
cout<<" ====>請選擇:";
scanf("%d",&choose);
syst
8、em("cls");
switch(choose)
{
case 0: exit(0);
//退出
break;
case 1: add();
fh();//增加學(xué)生成績
break;
case 2: select();
fh();//查看學(xué)生成績
break;
case 3: chazhao();
fh();// 查找
break;
case 4: del();
fh();//刪除
break;
case 5: tj();
fh();//統(tǒng)計(jì)
break;
case 6: px();
fh();//排序
break;
case
9、7:bca();
fh();//保存
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
然后就要對對應(yīng)的功能函數(shù)實(shí)現(xiàn),里面有很多的代碼。
首先是顯示主界面:讓操作的人一眼就能看到這系統(tǒng)有哪些功能 。我們根據(jù)界面的提示進(jìn)入對應(yīng)的數(shù)據(jù)操作
主界面的流程圖:
2.查看學(xué)生成績
3.查找學(xué)生成績
1.添加學(xué)生成績
學(xué)生管理系統(tǒng)
6.輸出前N名學(xué)生
4.刪除學(xué)生成績
5.總分、平均分
void xianshi
10、()
{
cout<<"===================================================";
cout<<" * 學(xué)生成績管理系統(tǒng) *"<
11、out<<"-- [4] 刪除學(xué)生成績 ***************************"<
12、<"==================================================="<
13、數(shù):";
cin>>numberTemp;
for(i=0;i>temp.name;
cout<<"學(xué)號:";
cin>>temp.num;
cout<<"性別:";
cin>>temp.sex;
cout<<"成績:"<>temp.score;
st[Number++]=temp; //將剛添加的寫入到數(shù)組
bc(&temp); //將剛添加的寫入到文件
}
cout<<"添加成功"<
14、ndl;
}
第二個(gè)是要查看學(xué)生的信息,這個(gè)很簡單,直接用一個(gè)for循環(huán)輸出在文件里的信息就好:
void select()//查看學(xué)生
{
int i=0;
cout<<"以下是全部學(xué)生成績"<
15、來查找。然后,比如按學(xué)號來查是,提示用戶輸入要查找的學(xué)生的學(xué)號,for循環(huán)和strcmp()函數(shù)查。當(dāng)文件里面有這個(gè)學(xué)生時(shí),輸出來給用戶;具體如下
void chazhao()//查找學(xué)生
{
int n=0;
cout<>n;
switch(n)
{
case 1: xmcz();
break;
case 2: xhcz();
break;
default:
cout<<"輸入有誤,結(jié)束!"<
16、hcz()//按學(xué)號查找 ,這里運(yùn)用了for循環(huán)和strcmp()查找學(xué)生。Strcmp()是一個(gè)比較函數(shù),里面兩個(gè)參數(shù)相等時(shí)入輸出結(jié)果。
{
char id[7];
int i=0;
cout<<"請輸入要查找學(xué)生學(xué)號:";
cin>>id;
system("cls");
printf("\t姓名\t學(xué)號\t性別\t成績\n");
for (i=0;i
17、>name;
system("cls");
cout<<"\t姓名\t學(xué)號\t性別\t成績\n";
for (i=0;i
18、<>n;
switch(n)
{
case 1: xmsc();
break;
case 2:
19、 xhsc();
break;
}
}
void xmsc()//按姓名刪除
{
FILE *fp=NULL;
char name[60];
int i=0;
int j=0;
printf("請輸入要?jiǎng)h除的學(xué)生姓名:");
scanf("%s",name);
for(i=0;i
20、式打開文件 把以前的數(shù)據(jù)擦除了
fp=fopen("F://student.dat","wb");
for (i=0;i>id;
for(i=0;i
21、
if (strcmp(id,st[i].num)==0) //如果查找到就刪除
{
for (j=i;j
22、把學(xué)生的分?jǐn)?shù)統(tǒng)計(jì)出來,這個(gè)也很好實(shí)現(xiàn)。就是把所有的學(xué)生的分?jǐn)?shù)加在一起,然后把除以總數(shù)得出平均分:
void tj()//統(tǒng)計(jì)
{
int i=0;
double sum=0.0;
for(i=0;i
23、NUmber=0;
int i=0;
int j=0;
for(i=0;iNumber)
{
wantNUmber=Number;
}
cout<<"\t姓名\t學(xué)
24、號\t性別\t成績"<
25、很簡單就用一個(gè)exit(0)。
.四 測試主程序
void main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;
if((fp=fopen("F://student.dat","rb"))==NULL)
{
cout<<("\n=========>提示:文件不存在,是否要?jiǎng)?chuàng)建一個(gè)?(y/n)\n");
cin>>yesorno;
if(yesorno=='y'||yesorno=='Y')
{ //這里僅為了建立文件,默認(rèn)的地址在
fp=fopen("F://student.dat","wb");
fclose(f
26、p);}
else
exit(0);
}
else
{Number=dq(st); //要是文件只能夠已經(jīng)有數(shù)據(jù) 將數(shù)據(jù)初始化到數(shù)組中}
system("cls");
while(true)
{ xianshi();
cout<<" ====>請選擇:";
scanf("%d",&choose);
system("cls");
switch(choose)
{case 0: exit(0);
//退出
break;
case 1: add();
fh();//增加學(xué)生成績
break;
case 2: select();
fh();//查看學(xué)
27、生成績
break;
case 3: chazhao();
fh();// 查找
break;
case 4: del();
fh();//刪除
break;
case 5: tj();
fh();//統(tǒng)計(jì)
break;
case 6: px();
fh();//排序
break;
case 7:bca();
fh();//保存
break;
default:
break;}
fflush(stdin);
getchar();
system("cls");}}
部分測試數(shù)據(jù)如下:
主界面
添加數(shù)據(jù)
查看所有學(xué)生:
查找
28、學(xué)生:選著1姓名查詢
刪除學(xué)生:比如按姓名來刪除
再次查看所有學(xué)生
按6進(jìn)行排序,查看前兩名學(xué)生的成績
按7保存信息。最后可以按0退出系統(tǒng)
測試完畢。
五 個(gè)人體會
通過這次課程設(shè)計(jì),我更加深刻的知道了我們學(xué)的c++和我們的生活密切相連,所以更應(yīng)該注意平時(shí)上課各種小知識點(diǎn)的積累。然后上機(jī)具體操作的情況又與筆試有很大的不同,因?yàn)橥ㄟ^鍵盤操作,更容易出錯(cuò)。所以我們平時(shí)在學(xué)習(xí)的時(shí)候,就應(yīng)該做到邊學(xué)邊編,如果很久沒有接觸到c++的編譯環(huán)境,就會出現(xiàn)不知道從何如手。
另外,程序的變化太大拉,它需要我們拓展課外知識,所以僅靠在課堂上的時(shí)間學(xué)好它是不現(xiàn)實(shí)的。有很多小的技巧,以及編程思想需要我們自己去領(lǐng)悟,這要求我們要有很好的自學(xué)能力。比如說這次變成如果沒有掌握好文件輸入,打開的話,就很難編出能實(shí)現(xiàn)功能的程序,還有需要到網(wǎng)上去查很多資料,不懂就要借鑒。
編程最重要的是思路清晰,條理清楚,只有思路比較清楚的條件下,進(jìn)展才比較順利。并且,在編譯過程中遇到的錯(cuò)誤也要耐心去修改,并且記住這相應(yīng)的錯(cuò)誤代碼,以便以后遇到相同的情況,知道怎么修正。