課程設計報告
設計題目:學生成績管理系統
專業:智能終端
班級:
學號:
姓名:
指導老師:
日期:
目錄
壹、設計任務與要求…………………………………………3
1.設計內容………………………………………………3
2.課程設計的要求………………………………………3
二、系統分析(需求分析)…………………………………3
1.需求分析…………………………………………3
2.系統性能要求……………………………………3
3.系統的功能分析……………………………………3
4.系統功能模塊……………………………………3
5.模塊框架圖…………………………………………3
三、系統設計與實現……………………………………4
1.界面設計…………………………………………4
2.功能設計與實現………………………………4
四、測試結果……………………………………4
五、總結…………………………………………5
六、參考資料……………………………………5
附錄:源程序……………………………………5
壹、設計任務與要求
1.設計內容:
a.設計四個類;學生類(描述學生基本信息);成績類:班級類;課程類(描述課程信息:課程編號,科目名稱(如高等數學,大學英語等);學生成績及課程信息用文件保存,每個類壹個文件,程序執行時從文件讀入;
b.能按學期,按班級完成對學生成績的錄入,修改,能按班級統計學生的成績;求學生的總分及平均分;並能根據學生的平均成績進行排序,能查詢學生成績,不及格科目及學生名單;能按班級輸出學生的成績單。
– 設置學生的成績信息:學生學號、姓名、所選課程名稱、平時成績、期末成績、平時成績所占百分比
– 計算學生總評成績:總評成績=平時成績*平時成績所占百分比+期末成績*(1-平時成績所占百分比)
– 顯示學生的姓名、所選課程名稱以及平時成績、期末成績和總評成績信息。分單人顯示和以班輸出(班成績單格式輸出到文件)
– 註意,至少壹個班,30人三門課
2.課程設計的要求:
根據C++課程所學的概念、理論和方法,按照C++程序設計的基本步驟,設計出壹個適當規模的程序來實現設計課程內容中的全部功能;設計主控模塊程序.對給出的程序源代碼要給出各部分的詳細註釋.自己根據能力及需要添加相應功能模塊,增強模擬系統功能。包括系統的功能分析、系統的功能模塊設計、程序流程圖或結構框圖、邏輯結構設計,數據庫中的表、視圖(如果使用)、索引的結構和定義、觸發器、存儲過程、課程設計體會。
二、系統分析(需求分析)
1.需求分析:
a.能對學生各科成績進行錄入:。
b.能對學生的成績進行增加。
c.能對學生的成績進行刪除。
d.能對學生的成績進行修改。
e.能對學生的成績按總成績,姓名,進行查詢。
f.能輸出學生的所有數據。
g.能進行成績統計
h能進行總分查詢排名。
2.系統性能要求:
a.系統安全、可靠;
b.功能齊全;
c.操作方便、界面友好;
d易於維護和擴充。
3.系統的功能分析:
資料維護:系統維護包括對學生信息的錄入操作及數據表中的信息進行瀏覽。
系統功能:可以對數據表中的信息進行瀏覽。
系統查詢:可以對學生的信息進行查詢。
4.系統功能模塊
學生成績查詢系統有:成績錄入、增加、刪除、修改,數據查詢,排序顯示構成。
5.模塊框架圖
三、系統設計與實現
1.界面設計
程序運行後會出現壹個簡捷的窗口,便於用戶查詢數據。
2.功能設計與實現
通過主窗體調用其他窗體,具體實現可以參照系統分析相關內容。應用系統主控界面包括記錄編輯和記錄查詢等功能模塊。記錄編輯功能完成學生成績記錄編輯和記錄查詢功能。記錄查詢功能可以對數據各分類的記錄進行查詢
四、測試結果
每壹個case都能執行,但是有很多的地方都不夠完善,例如:在總成績排序中,只能輸出總成績,不能單獨的輸出學生的相應的信息;每次進行別的操作之前都要在進行壹次數據的錄入,不能直接對原有的文件進行讀取。
五、總結
此次c++課程設計,在指導教師的精心教導下,我們學會了如何用C++編寫壹個簡單的應用程序。首先要對程序的設計要求有壹個比較明確的認識,然後系統分析與系統設計,最後是代碼設計與調試。程序實現上,設計了簡單的查詢界面,將各個功能集中出來按照程序編寫原則,便於查詢。
根據C++課程所學的概念、理論和方法,按照C++程序設計的基本步驟,設計出壹個適當規模的程序;進壹步加深對C++語言的理解和掌握。理論聯系實際,加深和鞏固所學的理論知識,提高實踐能力和計算機的綜合運用能力。我們編寫程序的過程是辛苦與快樂的,程序的編寫原則很重要,只要我們在編程,就必須不斷改進,才能更好提高編程能力。
六、參考資料
C++程序設計 譚浩強 清華大學出版社
附錄:源程序
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
#include<iomanip>
using namespace std;
class Tstu //通過定義壹個類來定義數據錄入的函數
{
char name[20];
int number;
float math,cpp,english,average,sum;
public:
Tstu()
{};
Tstu ( char n[20], int num,float ma,float cj,float eng ) ;
float getsum();//得到總分的函數
float getaver(); //得到平均分的函數
friend void main(); //將主函數定義為友元函數,方便訪問類中的成員
};
Tstu::Tstu ( char n[20], int num,float ma,float cj,float eng )
{
strcpy(name,n); //得到姓名
number=num; //得到學號
math=ma; //得到數學成績
cpp=cj; //得到c++成績
english=eng; //得到英語成績
}
float Tstu::getsum() //得到總分的函數
{
sum=cpp+english+math;
return sum;
}
float Tstu::getaver() //得到平均分的函數
{
average=getsum()/3;
return average;
}
void main()
{
cout<<"*****************歡迎來到學生成績查詢系統*****************"<<endl;
cout<<"請選擇您需要的操作!"<<endl; //菜單的輸出
cout<<"操作:"<<endl;
cout<<"(1)數據錄入"<<endl;
cout<<"(2)增加學生"<<endl;
cout<<"(3)刪除學生"<<endl;
cout<<"(4)修改數據"<<endl;
cout<<"查詢:"<<endl;
cout<<"(5)按總成績查詢"<<endl;
cout<<"(6)按姓名查詢"<<endl;
cout<<"(7)輸出所有學生的數據"<<endl;
cout<<"成績統計:"<<endl;
cout<<"(8)每個學生的平均成績"<<endl;
cout<<"(9)各科不及格人數"<<endl;
cout<<"排名:"<<endl;
cout<<"(10)按總分查詢排名"<<endl;
cout<<"(11)退出"<<endl;
cout<<"選擇相關操作請輸入相對的括號裏的阿拉伯數字及字母!"<<endl;
int p=0; //全局變量,用於選擇菜單時的輸入
char w;//全局變量,用於在大項中選擇是否繼續操作
Tstu *s[100]; //類定義的指針將所錄入的數據按類中的形式分別存儲
ofstream *file[100];
int i=0; //全局變量,用於做每個錄入數據的下標
int j=0;
int chris1=0; //用於判斷do—while語句
do //判斷輸入是否正確
{
cin>>p;
if((p>=1&&p<=11))
chris1=1;
else
cout<<"指令錯誤!請重新輸入:"<<endl;
}while(chris1==0);
do{
switch(p)
{
case 1: //數據的錄入
{
char c; //用於在小項中選擇是否繼續操作
char name[20];
int number;
float math,cpp,english;
do{
cout<<"請輸入姓名:"<<endl;
cin>>name;
cout<<"請輸入學號:"<<endl;
cin>>number;
cout<<"請輸入數學成績:"<<endl;
cin>>math;
cout<<"請輸入C++成績:"<<endl;
cin>>cpp;
cout<<"請輸入英語成績:"<<endl;
cin>>english;
fstream outfile,infile; //作壹個文本文檔在文件夾中用於顯示所錄入的數據
outfile.open("f1.txt",ios::out|ios::app);
if(!file)
{ cout<<"f1.txt can not open.\n";
return;
}
outfile<<name<<" "<<"學號:"<<number<<" "<<"數學成績:"<<math<<" "<<"C++成績:"<<cpp<<" "<<"外語成績:"<<english<<endl;
outfile.close();
infile.open("f1.txt",ios::in);
if(!file) //判斷文件是否打開
{ cout<<"f1.txt can not open.\n";
return;
}
char ch;
while(infile.get(ch))
cout<<ch;
cout<<endl;
infile.close();
j++;
s[i]=new Tstu(name, number,math, cpp, english);
i++;
cout<<"數據錄入成功,想繼續錄入嗎(y/n)"<<endl;
cin>>c;
chris1=0;
do{
if(c!='y'&&c!='n')
{ cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
else
chris1=1;
}while(chris1==0);
}while(c=='y'); //重復輸入
break;
}
case 2: //增加學生數據
{
char name[20];
int number;
float math,cpp,english;
char c;
do
{
cout<<"請輸入您要增加的學生的姓名:"<<endl;
cin>>name;
cout<<"請輸入妳要增加的學生的學號:"<<endl;
cin>>number;
cout<<"請輸入數學成績:"<<endl;
cin>>math;
cout<<"請輸入C++成績:"<<endl;
cin>>cpp;
cout<<"請輸入英語成績:"<<endl;
cin>>english;
fstream outfile,infile;
outfile.open("f1.txt",ios::out|ios::app);
if(!file)
{
cout<<"f1.txt can not open.\n";
return;
}
outfile<<name<<" "<<"學號:"<<number<<" "<<"數學成績:"<<math<<" "<<"C++成績:"<<cpp<<" "<<"外語成績:"<<english<<endl;
outfile.close();
infile.open("f1.txt",ios::in);
if(!file)
{
cout<<"f1.txt can not open.\n";
return;
}
char h;
while(infile.get(h))
cout<<h;
cout<<endl;
infile.close();
j++;
s[i]=new Tstu(name,number, math, cpp, english);
i++;
cout<<"數據錄入成功,想繼續錄入嗎(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case 3://刪除學生信息
{
char c;
string xingming,line,str,name;
do
{ ifstream fin("f1.txt");
fstream outfile("f2.txt",ios::trunc|ios::out); //作壹個文本文檔在文件夾中用於顯示所錄入的數據
cout<<"請輸入您要刪除的學生的姓名:"<<endl;
cin>>xingming;
while(!fin.eof() )
{
getline(fin,line);
istringstream stream(line);
name = line.substr(0,line.find(" ",0));//找到名字,判斷是否相等
if(name != xingming)
outfile<<line<<endl;
}
outfile.close();
fin.close();
fstream f("f1.txt",ios::trunc|ios::out);
ifstream outf("f2.txt");
f<<outf.rdbuf();
outf.close();
f.close();
cout<<"數據刪除成功,想繼續刪除嗎(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case 4://修改數據
{
string sname,line,str,name;
int nu;float eng,ma,com;int flag;char c;
if(i==0)
{
cout<<"系統中沒有輸入數據,請先輸入數據!"<<endl;break;
}
do
{
flag=0;
cout<<"請輸入您要修改的學生的姓名:";
cin>>name;
fstream fin("f1.txt",ios::in);
ofstream outfile("f.txt",ios::trunc|ios::out);
cout<<endl;
while(!fin.eof() ) //在文件中查找
{
getline(fin,line);
istringstream stream(line);
sname = line.substr(0,line.find(" ",0));
if(name!=sname)
{
outfile<<line<<endl;
}
else flag=1;
}
fin.close();
if(flag=1)
{
cout<<"請輸入修改學生姓名及其新學號,數學,c++和英語成績:";
cin>>name>>nu>>ma>>com>>eng;
cout<<endl;
outfile<<name<<" "<<"學號:"<<nu<<" "<<"數學成績:"<<ma<<" "<<"C++成績:"<<com<<" "<<"外語成績:"<<eng<<endl;
outfile.close();
fstream outf("f1.txt",ios::trunc|ios::out);
fstream inf("f.txt",ios::in);
outf<<inf.rdbuf()<<endl;
outf.close();
inf.close();
}
if(flag=0)cout<<"對不起,您要修改的學生不存在!請查證後輸入!"<<endl;
cout<<"想繼續修改嗎(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;
}
}while(c=='y');
break;
}
case 5://按總分查詢
{
int j=0;float SUM;char c;int flag;
if(i==0)
{
cout<<"系統中沒有輸入數據,請先輸入數據!"<<endl;break;
}
do
{
flag=0;
cout<<"請輸入您要查詢的學生的總成績:"<<endl;
cin>>SUM;
for(int j=0;j<i;j++)
{
if(s[j]->getsum()==SUM)
{
flag=1;
cout<<"您要查詢的學生是:"<<(*s[j]).name<<endl;
cout<<"該生的信息為:"<<endl;
cout<<" 學號:"<<(*s[j]).number<<" 數學分數:"<<(*s[j]).math<<" c++分數:"<<(*s[j]).cpp<<" 英語分數"<<(*s[j]).english<<endl;
}
}
if(flag==0)cout<<"對不起!您要查詢的學生不存在!"<<endl;
cout<<"是否繼續查?(y/n):";
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
};
}while(c=='y');
break;
}
case 6://按姓名查詢
{
char n[20];char c;int j=0;int flag;
if(i==0)
{
cout<<"系統中沒有輸入數據,請先輸入數據!"<<endl;break;
}
do
{
flag=0;
cout<<"請輸入要查詢的名字: "<<endl;
cin>>n;
for(int j=0;j<i;j++)
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1;
cout<<"您要查詢的學生是:"<<(*s[j]).name<<endl;
cout<<"該生的信息是:學號:"<<(*s[j]).number<<" 數學分數:"<<(*s[j]).math<<"c++分數:"<<(*s[j]).cpp<<"英語分數:"<<(*s[j]).english<<endl;
}
}
if(flag==0)
cout<<"對不起您要查詢的學生不存在,請查證後再輸入!"<<endl;
cout<<"您想繼續查詢嗎?(y/n):";
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入:"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case 7://輸出所有學生數據
{
cout<<"所有學生數據如下:"<<endl;
ifstream file;
file.open("f1.txt",ios::in);
cout<<file.rdbuf();
file.close();
break;
}
case 8://統計每個學生的平均成績
{
if(i==0)
{
cout<<"系統中沒有輸入數據,請先輸入數據!"<<endl;break;
}
for(int m=0;m<i;m++)
{
cout<<(*s[m]).name<<" 學號:"<<(*s[m]).number<<" 總分:"<<(*s[m]).getsum()<<" 均分:"<<(*s[m]).getaver()<<endl;
}
break;
}
case 9://統計各學科不及格人數
{
if(i==0)
{
cout<<"系統中沒有輸入數據,請先輸入數據!"<<endl;break;
}
int m,n,k,j;m=0;n=0;k=0;
for(j=0;j<i;j++)
{
if(s[j]->math<60)m++;
if(s[j]->cpp<60)n++;
if(s[j]->english<60)k++;
}
cout<<"數學不及格人數為:"<<m<<endl;
cout<<"c++不及格人數為:"<<n<<endl;
cout<<"英語不及格人數為:"<<k<<endl;
break;
}
case 10://按總分排名
{
if(i==0)
{
cout<<"系統中沒有輸入數據,請先輸入數據!"<<endl;break;
}
int h,g,n;int j=0;float a[100],temp;
for(g=0;g<i;g++)
{
a[j]=(*s[g]).getsum();j++;
}
for(h=0;h<i;h++)
{for(n=0;n<i-h;n++)
if(a[n]>a[n+1])
{
temp=a[n];a[n]=a[n+1];a[n+1]=temp;
}
}
for(n=1;n<=i;n++)
cout<<a[n]<<endl;
break;
}
}
cout<<" 您想繼續進行其他操作嗎?(y/n):";
int flag=0;
do
{
cin>>w;
cout<<endl;
if(w!='y'&&w!='n')
cout<<" 指令錯誤!請重新輸入!"<<endl;
else
flag=1;
}while(flag==0);
if(w=='y')
{
cout<<"*****************歡迎來到學生成績查詢系統*****************"<<endl;
cout<<"請選擇您需要的操作!"<<endl; //菜單的輸出
cout<<"操作:"<<endl;
cout<<"(1)數據錄入"<<endl;
cout<<"(2)增加學生"<<endl;
cout<<"(3)刪除學生"<<endl;
cout<<"(4)修改數據"<<endl;
cout<<"查詢:"<<endl;
cout<<"(5)按總成績查詢"<<endl;
cout<<"(6)按姓名查詢"<<endl;
cout<<"(7)輸出所有學生的數據"<<endl;
cout<<"成績統計:"<<endl;
cout<<"(8)每個學生的平均成績"<<endl;
cout<<"(9)各科不及格人數"<<endl;
cout<<"排名:"<<endl;
cout<<"(10)按總分查詢排名"<<endl;
cout<<"(11)退出"<<endl;
cout<<"選擇相關操作請輸入相對的括號裏的阿拉伯數字及字母!"<<endl;
cin>>p;
}
}while(w=='y');
}
另外,團IDC網上有許多產品團購,便宜有口碑