资源描述
C++程序设计课程设计
C++程序设计课程设计说明书
题目: 学生成绩管理系统
学生姓名: 李昶威
学 号: 201012010120
院 (系): 理学院
专 业: 数学与应用数学
指导教师: 李勇
2012 年 6 月 15 日
陕 西 科 技 大 学
C++程序设计课程设计任务书
理学院 应用数学专业 数学101班班级 姓名: 李昶威 学号: 201012010120
题目: 学生成绩管理系统
课程设计从 2012 年 5 月 20日起到 2012 年 6 月 15 日
1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等):
1)、设计内容:
制作学生成绩管理系统,实现数据录入、数据删除、数据浏览以及数据查询等功能。
2)、课程设计的要求:
包括系统设计要求,开发环境要求,技术文档要求三部分。
系统设计要求:
a) 学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定。
b) 该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,保存文件。
c) 系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用。也可用windows界面下的菜单栏、弹出式菜单、下拉菜单。
d) 每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件。该文本文件名由班级号和课程名拼音字符串构成。输入班级号和课程名字符串后自动生成文件名。如1班,语文,则文件名为:c1yuwen.txt.
e) 每个学生学习的课程有语文,英语,数学,物理,化学,生物。
f) 学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评成绩).总评成绩由程序自动计算,总评成绩=平时成绩﹡30%+期末成绩﹡70%。
g) 学号是一个9位整数构成的字符串, 学号的编码规则:入学年份+在读年级+在读班级+班内编号;入学年份用4位整数构成字符串,如2003年入学则表示为:”2003”;在读年级用1位整数构成字符串,如正在1年级读书则表示为:”1”;在读班级用2位整数构成字符串,如正在1班读书则表示为:”01”;班内编号用2位整数构成字符串,如在班内编号为23号则表示为:”23”
开发环境要求:
软件环境:windows98/windowsXP/windows2000,Visual C++
硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)
技术文档要求:
按照软件工程技术文档编写要求进行。要求流程图绘制规范,模块功能描述清晰,数据字典齐全。
2、对课程设计成果的要求〔包括图表、实物等硬件要求〕:
1)提交课程设计报告
按照系统设计要求,用Visual C++设计和开发一个应用程序—学生成绩管理系统,提交由需求分析;系统设计说明(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图);系统技术文档 (包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论、运行情况记录),系统使用说明书,源程序代码为附录构成的课程设计报告。
2)课程设计报告版式要求
打印版面要求:A4纸,页边距:上2cm,下2cm,左2.5cm、右2cm;字体:正文宋体、小四号;行距:固定值20;页眉1.5cm ,页脚1.75cm;页码位于页脚居中打印;奇数页页眉“C++程序设计课程设计”,偶数页页眉“人事信息管理系统”,页眉宋体小5号;段落及层次要求:每节标题以四号黑体左起打印(段前段后各0.5行),节下为小节,以小四号黑体左起打印(段前段后各0.5行)。换行后以小四号宋体打印正文。节、小节分别以1、1.1、1.1.1依次标出,空一字符后接各部分的标题。
当论文结构复杂,小节以下的标题,左起顶格书写,编号依次用(1)、(2)……或1)、2)……顺序表示。字体为小四号宋体。
对条文内容采用分行并叙时,其编号用(a)、(b)……或a)、b)……顺序表示,如果编号及其后内容新起一个段落,则编号前空两个中文字符。
3)设计报告装订顺序与规范
封面
C++程序设计课程设计任务书
目录
C++程序设计设计课程设计报告正文
设计体会及今后的改进意见
参考文献(资料)
左边缘装订
3、课程设计工作进度计划:
时间
设计任务及要求
第13周
需求分析分析、功能分解并深入学习动态链表知识
第14周
编写程序代码(教师指导1周)
第15周
调试、完善、编写课程设计报告
指导教师: 日期:
教研室主任: 日期:
目录
一、 系统需求分类---------------------------------------------------------5
1.系统需求------------------------------------------------------------5
2.功能需求------------------------------------------------------------5
3.开发环境------------------------------------------------------------6
二、 模块设计-------------------------------------------------------------6
三、 调试分析----------------------------------------------------6
四、 测试结果-----------------------------------------------------6
五、 设计体会及今后的改进意见-----------------------------------10
六、 参考文献---------------------------------------------------10
七、 源程序代码-------------------------------------------------10
学生成绩管理信息系统设计与开发
一、 系统需求分析
1.系统需求
为了实现数据录入、数据删除、数据浏览以及数据查询等功能,该学生成绩管理系统主要划分为学生信息的载入、创建、查询、修改、统计、显示以及保存等内容,这些管理职能统一由管理者负责。
在学生管理系统开发时应该满足以下具体的系统要求:
a) 学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定.
b) 该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,保存文件.
c) 系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用.也可用windows界面下的菜单栏、弹出式菜单、下拉菜单。
d) 每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件,以便在windows的notebook或者Microsoft word下打印,规定该文本文件名由班级号和课程名拼音字符串构成.输入班级号和课程名字符串后自动生成文件名.如1班,语文,则文件名为:c1yuwen.txt.
e) 每个学生学习的课程有语文,英语,数学,物理,化学,生物.
f) 学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评成绩).总评成绩由程序自动计算,总评成绩=平时成绩﹡30%+期末成绩﹡70%.
g) 学号是一个9位整数构成的字符串, 学号的编码规则:入学年份+在读年级+在读班级+班内编号;入学年份用4位整数构成字符串,如2003年入学则表示为:”2003”;在读年级用1位整数构成字符串,如正在1年级读书则表示为:”1”;在读班级用2位整数构成字符串,如正在1班读书则表示为:”01”;班内编号用2位整数构成字符串,如在班内编号为23号则表示为:”23”
2. 功能需求
基于系统需求分析,该系统需要实现以下基本功能:
1) 查询所有学生的所有成绩(包括各科成绩,平时成绩以及总评成绩);
2) 查询所有学生某一单科的成绩;
3) 修改学生的成绩;
4) 删除学生的成绩;
5) 对学生的成绩进行保存,并可以在windows的notebook或者Microsoft word下打印。
3.开发环境
软件环境:windows98/windowsXP/windows2000,Visual C++
硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)
二、系统模块设计
“学生成绩管理信息系统”包括留个模块:信息录入,信息查询,信息修改,信息删除,信息保存以及退出程序。这六个模块既相互联系又相互独立,其中信息查询,信息修改,信息删除,信息保存这四个模块必须以信息录入为基础。
1) 信息录入:对学生的成绩进行录入,然后通过其他的操作,保存为所需的文件;
2) 信息查询:在信息录入的基础上,对学生的成绩进行查询;
a. 查询所有学生的所有成绩
b. 查询所有学生的某一科成绩
3) 信息修改:在信息录入的基础上,对所需学生的成绩进行修改;
4) 信息删除:在信息录入的基础上,对相关学生的成绩进行删除
5) 信息保存:在信息录入的基础上,对学生的成绩进行必要的编辑后,保存所需的文件;
6) 退出程序:退出该程序。
三、调试分析
调试是为了发现程序中的错误而执行程序的过程,调试的目的就是在软件投入生产运行之前,尽可能的发现软件中的错误。成功的调试是发现了至今为止尚未发现的错误的调试。
由于在编写程序是考虑的不充分,调试成为了最困难的一个部分。遇到了一下一些问题;
1. 头文件弄不清楚每个是干什么的,总是缺几个。
2. 自动分配内存,这个问题一直弄不清楚,总是出错。
3. 开始不知道有system("cls");这个语句用,使屏幕很冗长。
4. 总评成绩调不好,类定义出现问题。
5. 指针方面遇到一些不清楚。
6. 输入错误等。
四、测试结果
1.主界面
图1-1
2.学生信息录入界面
图1-2
3.(1)查询所有学生所有成绩界面
图1-3
(2)查询所有学生的某一科成绩界面
图1-4
4. 学生信息修改界面
图1-5
5.学生信息删除界面
图1-6
6.学生信息保存界面
图1-7
7.退出程序界面
图1-8
五、设计体会及今后的改进意见
在整个系统设计和开发的过程中,由于本身能力的问题,有许多程序都写不出来,而且还有部分程序编译出来了,却没有办法运行,但是我还是坚持了下来,最后当我到运行界面时候,心中顿时充满了欣慰。这次设计总的来说是对我的能力的一次挑战,以前参加过数学建模竞赛,也编译过一些程序,但是却没有这个程序这么繁琐,期间出现的问题也比较多。总之来说,通过上机的实践,我学到了许许多多在课本上无法学到的东西,毕竟有些多少是要通过实践才能亲身体会到的。
不过此系统还有很多不足的地方存在,特别是在程序的编译与运行上需要进一步的讨论与改进。特别是在程序的编译上与运行上
六、参考文献
[1] 谭浩强.C程序设计.北京:清华大学出版社,2005
[2] 谭浩强.C程序设计旦角与上机指导(第三版).北京:清华大学出版社,2005.
七、源程序代码
#include "iostream.h"
#include <string>
#include "malloc.h"
#include "stdlib.h"
#include "fstream.h"
#include "stdio.h"
#include "iomanip.h"
#include "conio.h"
#define NULL 0
#define LEN sizeof(class STUDENT)
class STUDENT
{
public:
int number;
char name[20];
int yuwen1,yuwen2;
double yuwen3;//1表示平时成绩,2表示期末成绩,3表示总评成绩
int yingyu1,yingyu2;
double yingyu3;
int shuxue1,shuxue2;
double shuxue3;
int wuli1,wuli2;
double wuli3;
int huaxue1,huaxue2;
double huaxue3;
int shengwu1,shengwu2;
double shengwu3;
class STUDENT *next;
double yuwen()
{
return(yuwen3=yuwen1*0.3+yuwen2*0.7);
}
double yingyu()
{
return(yingyu3=yingyu1*0.3+yingyu2*0.7);
}
double shuxue()
{
return(shuxue3=shuxue1*0.3+shuxue2*0.7);
}
double wuli()
{
return(wuli3=wuli1*0.3+wuli2*0.7);
}
double huaxue()
{
return(huaxue3=huaxue1*0.3+huaxue2*0.7);
}
double shengwu()
{
return(shengwu3=shengwu1*0.3+shengwu2*0.7);
}
};
class STUDENT * head=NULL;
void main()
{
class STUDENT;
void Input();
void Show();
void FindClass();
void Modify();
void Del();
void SaveData();
int q=1;
char k;
while (q)
{
system("cls");
cout << "----------------------------------\n";
cout << " 学生成绩管理 \n";
cout << "----------------------------------\n";
cout << " 1 学生信息录入 \n";
cout << " 2 学生信息查询 \n";
cout << " 3 学生信息修改 \n";
cout << " 4 学生信息删除 \n";
cout << " 5 学生信息保存 \n";
cout << " 0 退出程序 \n";
cout << "----------------------------------\n";
cout << "\n";
cout << "\n 请输入选择的功能序号: \n";
cin>> k;
while(k !='1' && k!='2' && k!='3' && k!='4'&& k!='5' && k!='0'){
cout<<"输入错误,请重新输入"<<endl;
cin>>k;
}
char x;
if(k=='0'){
cout<<"退出前请确定没有忘记保存数据。"<<endl;
cout<<"确定退出 按y ,取消退出按n"<<endl;
cin>>x;
while(x !='y' && x !='n' ){
cout<<"输入错误,请重新输入"<<endl;
cin>>x;
}
}
if(x=='n')
continue;
switch(k)
{
case '1':
system("cls");
Input();
getchar();
break;
case '2':
system("cls");
cout << "-----------------------------------------------\n";
cout << " 1 查询所有学生的所有成绩 \n";
cout << " 2 查询所有学生的某一科成绩 \n";
cout << " 0 返回上一级 \n";
cout << "-----------------------------------------------\n";
cout << "\n 请输入选择的功能序号: \n";
cin>>k;
while(k!='1' && k!='2'&& k!='0'){
cout<<"输入错误,请重新输入"<<endl;
cin>>k;
}
switch(k){
case '1':
Show();
getchar();
break;
case '2':
FindClass();
getchar();
break;
case '0':
q=0;
break;
}
q=1;
break;
case '3':
system("cls");
Modify();
getchar();
break;
case '4':
system("cls");
Del();
getchar();
break;
case '5':
system("cls");
SaveData();
getchar();
break;
case '0':
q=0;
break;
};
}}
void Input()
{ int n=0;
class STUDENT *p1,*p2;
char flag='y';
p1=p2=(class STUDENT *)malloc(LEN);
cout << "请按照以下顺序,输入您要输入的学生信息:"<< endl;
cout << setw(0) << "学号" << " " << "姓名" << " "<<"语文平时成绩"<<" "<<"语文期末成绩"
<< " " << "英语平时成绩" << " " << "英语期末成绩" <<" "
<< "数学平时成绩" << " " << "数学期末成绩"
<<" "<<"物理平时成绩" <<" "<<"物理期末成绩"<< " " <<"化学平时成绩"
<<" "<< "化学期末成绩"<<" "<<"生物平时成绩" <<" "<<"生物期末成绩"<<endl;
cin >> p1->number >> p1->name >>p1->yuwen1
>> p1->yuwen2 >> p1->yingyu1
>> p1->yingyu2 >> p1->shuxue1
>> p1->shuxue2>>p1->wuli1>>p1->wuli2
>> p1->huaxue1 >> p1->huaxue2>>p1->shengwu1
>> p1->shengwu2 ;
while(flag=='y'){
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
cout<<" 要继续添加吗(y/n)"<<endl;
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
if(flag=='n'){
cout<<"请及时保存数据,现在返回上一级"<<endl;
break;
}
if(flag=='y'){p1=(class STUDENT *)malloc(LEN);
cout << "请按照以下顺序,输入您要输入的学生信息:"<<endl;
cout << setw(0) << "学号" << setw(8) << "姓名" << " "<<"语文平时成绩"<<" "<<"语文期末成绩"
<<" "<<"语文总评成绩"<< " " << "英语平时成绩" << " " << "英语期末成绩" <<" "
<<"英语总评成绩"<< " " << "数学平时成绩" << " " << "数学期末成绩"<< " "<<"数学总评成绩"
<<" "<<"物理平时成绩" <<" "<<"物理期末成绩"<<" "<<"物理总评成绩"<< " " <<"化学平时成绩"
<<" "<< "化学期末成绩"<< " "<<"化学总评成绩"<<" "<<"生物平时成绩" <<" "<<"生物期末成绩"
<<" "<<"生物总评成绩"<<endl;
cin>> p1->number >> p1->name >>p1->yuwen1
>> p1->yuwen2 >> p1->yingyu1
>> p1->yingyu2 >> p1->shuxue1
>> p1->shuxue2>>p1->wuli1>>p1->wuli2
>> p1->huaxue1 >> p1->huaxue2>>p1->shengwu1
>> p1->shengwu2 ;}
}
p2->next=NULL;
}
void Show()
{
class STUDENT *p;
cout<<"\n所有学生的成绩:"<<endl;
p=head;
if(head!=NULL){
cout << setw(0) << "学号" << setw(8) << "姓名" << " "<<"语文平时成绩"<<" "<<"语文期末成绩"
<<" "<<"语文总评成绩"<< " " << "英语平时成绩" << " " << "英语期末成绩" <<" "
<<"英语总评成绩"<< " " << "数学平时成绩" << " " << "数学期末成绩"<< " "<<"数学总评成绩"
<<" "<<"物理平时成绩" <<" "<<"物理期末成绩"<<" "<<"物理总评成绩"<< " " <<"化学平时成绩"
<<" "<< "化学期末成绩"<< " "<<"化学总评成绩"<<" "<<"生物平时成绩" <<" "<<"生物期末成绩"
<<" "<<"生物总评成绩"<<endl;
do{
cout<< setw(0) << p->number << setw(8) << p->name << " "<<p->yuwen1<<" "<<p->yuwen2<<" "<<p->yuwen()<<" "
<< " " << p->yingyu1 << " " <<p->yingyu2 << " " <<p->yingyu() << " " <<p->shuxue1<< " " << p->shuxue2
<<" "<< p->shuxue() <<" "<<p->wuli1 <<" "<<p->wuli2 <<" "<<p->wuli()<<" "<<p->huaxue1 <<" "<<p->huaxue2
<<" "<<p->huaxue()<<" "<<p->shengwu1 <<" "<<p->shengwu2<<" "<<p->shengwu()<<endl;
p=p->next;
}while(p != NULL);
cout<<"请及时保存数据,现在返回上一级"<<endl;
}
else
cout<<"\n学生成绩为空,请确认。"<<endl;
}
;
void FindClass()
{
class STUDENT *p;
char flag='y';
char it;
do{
p=head;
cout<<"请输入要查找科目所对应的序号:"<<endl;
cout<<"1--语文"<<setw(12)<<"2--英语"<<setw(12)<<"3--数学"<<setw(12)<<"4--物理"<<setw(12)<<"5--化学"<<setw(12)<<"6--生物"<<endl;
cin>>it;
while(it !='1' && it!='2' && it!='3' && it!='4'&& it!='5'&&it!='6'){
cout<<"输入错误,请重新输入"<<endl;
cin>>it;
}
switch(it) {
case '1':
cout<<" 语文单科成绩表 "<<endl;
cout<< setw(0) << "学号" << " " << "姓名" << " "<<"语文平时成绩"<<" "<<"语文期末成绩"
<< " " << "语文总评成绩" <<endl;
while(p!=NULL){
cout<< setw(0) << p->number << " " << p->name << " "<<p->yuwen1<<" "<<p->yuwen2
<< " " << p->yuwen()<<endl;
p=p->next;
}
break;
case '2':
cout<<" 英语单科成绩表 "<<endl;
cout<< setw(0) << "学号" << " " << "姓名" << " "<<"英语平时成绩"<<" "<<"英语期末成绩"
<< " " << "英语总评成绩" <<endl;
while(p!=NULL){
cout<< setw(0) << p->number << " " << p->name << " "<<p->yingyu1<<" "<<p->yingyu2
<< " " << p->yingyu()<<endl;
p=p->next;
}
break;
case '3':
cout<<" 数学单科成绩表 "<<endl;
cout<< setw(0) << "学号" << " " << "姓名" << " "<<"数学平时成绩"<<" "<<"数学期末成绩"
<< " " << "数学总评成绩" <<endl;
while(p!=NULL){
cout<< setw(0) << p->number << " " << p->name << " "<<p->shuxue1<<" "<<p->shuxue2
<< " " << p->shuxue()<<endl;
p=p->next;
}
break;
case '4':
cout<<" 物理单科成绩表 "<<endl;
cout<< setw(0) << "学号" << " " << "姓名" << " "<<"物理平时成绩"<<" "<<"物理期末成绩"
<< " " << "物理总评成绩" <<endl;
while(p!=NULL){
cout<< setw(0) << p->number << " " << p->name << " "<<p->wuli1<<" "<<p->wuli2
<< " " << p->wuli()<<endl;
p=p->next;
}
break;
case '5':
cout<<" 化学单科成绩表 "<<endl;
cout<< setw(0) << "学号" << " " << "姓名" << " "<<"化学平时成绩"<<" "<<"化学期末成绩"
<< " " << "化学总评成绩" <<endl;
while(p!=NULL){
cout<< setw(0) << p->number << " " << p->name << " "<<p->huaxue1<<" "<<p->huaxue2
<< " " << p->huaxue()<<endl;
p=p->next;
}
break;
case '6':
cout<<" 生物单科成绩表 "<<endl;
cout<< setw(0) << "学号" << " " << "姓名" << " "<<"生物平时成绩"<<" "<<"生物期末成绩"
<< " " << "生物总评成绩" <<endl;
while(p!=NULL){
cout<< setw(0) << p->number << " " << p->name << " "<<p->shengwu1<<" "<<p->shengwu2
<< " " << p->shengwu()<<endl;
p=p->next;
}
break;
}
cout<<" 要继续查找吗(y/n)";
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
if(flag=='n')
break;
}while(flag=='y');
} ;
void Modify()
{
int num;
class STUDENT *p1;
char flag='y';
do{
cout<<"请输入要修改成绩的学生的学号:"<<endl;
cin>>num;
p1=head;
while(p1!=NULL ){
if(p1->number==num){
cout<<"请按以下的格式修改:"<<endl;
cout<< setw(0) << "姓名" << " "<<"语文平时成绩"<<" "<<"语文期末成绩"
<< " " << "英语平时成绩" << " " << "英语期末成绩" << " " << "数学平时成绩" << " " << "数学期末成绩"
<<" "<<"物理平时成绩" <<" "<<"物理期末成绩"<< " " <<"化学平时成绩"
<<" "<< "化学期末成绩"<<" "<<"生物平时成绩" <<" "<<"生物期末成绩"<<endl;
cin >> p1->name >> p1->yuwen1>>p1->yuwen2>> p1->yingyu1 >>p1->yingyu2
>>p1->shuxue1>> p1->shuxue2>>p1->wuli1 >>p1->wuli2 >>p1->huaxue1
>>p1->huaxue2 >>p1->shengwu1 >>p1->shengwu2;
break;
}
else
p1=p1->next;
}
if(p1==NULL)
cout<<"没有该学号的同学,请查证:"<<endl;
cout<<" 要继续修改吗(y/n)"<<endl;
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
展开阅读全文