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