《C++程序设计报告》
一.设计题目:学生成绩管理系统。
二.课程设计内容
1.简单的系统与功能分析
2.建立数据结构表
3.要建立一个测试的数据表,至少要有20个测试数据
4.使用数据链表实现数据的:录入、查询、修改、增加、删除、统计、输出
三.程设计目的
a) 了解和掌握掌握程序设计的基本过程
b) 进一步熟悉C++语言的特点
c) 通过设计一个程序,更好的掌握C++这门语言
d) 能够使自己的程序实现一定的功能,对C++产生一种浓厚的兴趣
四.课程设计要求
1. 写出系统需求、功能分析
2. 写出数据结构表
3. 写出数据测试表
4. 编写代码
5. 上机调试
6. 写出设计报告书
五.下面是学生成绩管理系统的数据结构表
序号 | 成员名(字段名) | 数据类型 | 长度 | 字段含义 |
1 | Class_0 | char | 20 | 班级 |
2 | num | int | | 学号 |
3 | name | Char | 8 | 姓名 |
4 | elec | float | | 电子技术 |
5 | C_prog | Float | | C++程序设计 |
6 | Media | Float | | 多媒体技术 |
7 | Eng | Float | | 大学英语 |
8 | Math | Float | | 高等数学 |
9 | Sport | Float | | 大学体育 |
10 | Polity | Float | | 马克思主义政治经济学 |
11 | Ave | Float | | 平均成绩 |
12 | Order | int | | 名次 |
程序功能介绍
在浪费您的宝贵时间看此程序之前,请先允许我向您介绍一下我这个粗俗的“学生信息管理系统”所能过成的一些小小的功能。
首先,当您初次进入本系统时,你会看到一个非常人性化的窗口界面,也将为您导航,不至于你在面对这个“小东西”时而不知所措。然后系统将提示您输入一个数,以确定您所要选择的功能。下面列举出您好输入的数所对应的功能,相信这一定能对您好了解和使用本系统有非常实在的帮助:
0.退出系统:这将直接退出本系统,所以友情提醒您,当您确定需要退出时,才能用到她,所以切记慎用!!
1. 输入成绩:系统将提示您依次要输入什么,这样您就不至于张冠李戴了。
2. 修改成绩:您只要输入学号,便能轻松的修改输错的成绩,并有系统提示您该怎样输入。
3. 成绩查询:输入学号,便能快速查询该生详细情况简单吧!!
4. 删除学生记录:也许是您的疏忽不小心输错了,我想该功能也许有补牢未晚的功效了。
5. 输出所有学生成绩:全班成员情况,尽收眼底。
6. 统计平均成绩:作为一个老师,我想莫过于想知道全班的大体情况,此功能将完成您的心愿!
看完了以上的介绍觉得怎么样,是否想先睹为快呢?当然只要您想要,您就能拥有她!!
另附:功能结构图(如果您急于知道有什么功能或时间太紧,这莫过于是最好的选择了)
//.cpp源程序
#include <iostream.h>
#include <string.h>
struct node
{
int Class;
int num;
char name[8];
float elec,cprog,math,eng,sport,polity;
float ave;
int order;
node *next;
};
node *insert(node *head,node *p)//按顺序插入一个结点
{
node *p1,*p2;
if(head==0)
{
head=p;
p->next=0;
return(head);
}
else if(head->ave<=p->ave)
{
p->next=head;
head=p;
return(head);
}
else
{p2=p1=head;
while(p2->next&&p2->ave>p->ave)
{
p1=p2;p2=p2->next;
}
if(p2->ave>p->ave)
{
p2->next=p;
p->next=0;
}
else {
p->next=p2;
p1->next=p;
}
}
return(head);
}
node *create(void)//创建一条有序键表
{
node *p1,*head=0; int Class;char name[8];
int num;static int order=0;
float elec,cprog,math,eng,sport,polity,ave;
cout<<"请输入班级,姓名,学号,电子技术,C++成绩,数学,";
cout<<"英语,政治,体育,以-1结束"<<endl;
cin>>Class>>name>>num>>elec>>cprog>>math>>eng>>sport>>polity;
while(Class!=-1)
{
p1=new node;
ave=(elec+cprog)/2;
p1->Class=Class;p1->num=num;strcpy(p1->name,name);p1->elec=elec;
p1->math=math;p1->eng=eng;p1->polity=polity;p1->sport=sport;
p1->cprog=cprog;p1->order=++order;
head=insert(head,p1);
cout<<"请输入班级,姓名,学号,电子技术,C++,数学,";
cout<<"英语,政治,体育成绩以-1结束"<<endl;
cin>>Class>>name>>num>>elec>>cprog>>math>>eng>>sport>>polity;
}
if(head){ p1->next=0;}
return(head);
}
void lookup(node *head,int num)//查找函数,找到对应学号的学生
{
node *p1,*p2;
if(head==0)
{
cout<<"无学生记录!"<<endl;
}
if(head->num==num)
{
cout<<"姓名:"<<head->name<<'\t'<<"学号:"<<head->num<<'\t';
cout<<"班级:"<<head->Class<<'\t'<<"elec:"<<head->elec<<'\t';
cout<<"C++:"<<head->cprog<<endl;
cout<<"数学:"<<head->math<<'\t'<<"英语:"<<head->eng<<'\t';
cout<<"政治:"<<head->polity<<'\t'<<"体育:"<<head->sport<<endl;
cout<<"你考了第"<<head->order <<"名!"<<endl;
}
else{
p1=head;p2=head->next;
while(p2->num!=num&&p2->next!=0)
{
p1=p2;
p2=p2->next;
}
if(p2->num==num)
{
cout<<"姓名:"<<p2->name<<'\t'<<"学号:"<<p2->num<<'\t';
cout<<"班级:"<<p2->Class<<'\t'<<"elec:"<<p2->elec<<'\t'<<"C++"<<p2->cprog<<endl;
cout<<"数学:"<<p2->math<<'\t'<<"英语:"<<p2->eng<<'\t';
cout<<"政治:"<<p2->polity<<'\t'<<"体育:"<<p2->sport<<endl;
cout<<"你考了第"<<p2->order <<"名!"<<endl;
}
}
}
void output(node *head)//输出函数,输出所有人的成绩
{
node *p;
p=head;
cout<<"输出学生信息:"<<endl;
while(p!=0)
{
cout<<"姓名:"<<p->name<<'\t'<<"学号:"<<p->num<<'\t';
cout<<"班级;"<<p->Class<<'\t'<<"elec:"<<p->elec<<'\t';
cout<<"C++:"<<p->cprog<<endl;
cout<<"数学:"<<p->math<<'\t'<<"英语:"<<p->eng<<'\t';
cout<<"政治:"<<p->polity<<'\t'<<"体育;"<<p->sport<<endl;
cout<<"你考了第"<<p->order <<"名!"<<endl;
cout<<endl;
p=p->next;
}
cout<<endl;
}
node *modify(node *head,int num)//修改函数,修改对应学号的学生成绩
{
node *p1,*p2;
if(head==0)
{
cout<<"无学生记录!"<<endl;
return(0);
}
else if(head->num==num)
{
float elec,cprog,math,eng,sport,polity;
cout<<"请输入新的电子技术成绩和C++成绩,数学,英语,政治,";
cout<<"体育成绩以-1结束"<<endl;
cin>>elec>>cprog>>math>>eng>>sport>>polity;;
head->elec=elec;head->cprog=cprog;head->math=math;head->eng=eng;
head->polity=polity;head->sport=sport;
}
else
{
p1=head;p2=head->next;
while(p2->num!=num&&p2->next!=0)
{
p1=p2;
p2=p2->next;
}
if(p2->num==num)
{
float elec,cprog,math,eng,sport,polity;
cout<<"请输入新的子技术成绩和C++成绩数学,英语,政治,";
cout<<"体育成绩以-1结束"<<endl;
cin>>elec>>cprog>>math>>eng>>sport>>polity;
p2->elec=elec;p2->cprog=cprog;p2->math;p2->eng=eng;
p2->polity=polity;p2->sport=sport;
}
else cout<<"没找到该学生!"<<endl;
}
return(head);
}
node *Delete(node *head,int num)//删除一个学生的记录
{
node *p1,*p2;
if(head==0)
{
cout<<"无学生记录!"<<endl;
return(0);
}
else if(head->num==num)
{
p1=head;head=head->next;
delete p1;cout<<"已删除了这个学生的记录"<<endl;
}
else
{
p1=head;p2=head->next;
while(p2->num!=num&&p2->next!=0)
{
p1=p2;
p2=p2->next;
}
if(p2->num==num)
{
p1->next=p2->next;
delete p2;cout<<"已删除了这个学生的记录"<<endl;
}
else cout<<"没找到该学生!"<<endl;
}
return(head);
}
void statistic(node *head)//统计函数,统计平均成绩
{
node *p1;int i=0;
float s1=0,s2=0,s3=0,s4=0,s5=0,s6=0;//S1为电子技术总成绩;
//S2为C++总成绩;s3为数学总成绩;s4为英语,S5为政治;S6为体育;
p1=head;
while(p1!=0)
{
s1=s1+p1->elec;s2=s2+p1->elec;i++;s3=s3+p1->math;
s4=s4+p1->eng;s5=s5+p1->polity;s6=s6+p1->sport;i++;
p1=p1->next;
}
cout<<"平均成绩:"<<endl;
cout<<"电子技术平均成绩"<<s1/i<<'\t'<<"C++平均成绩:"<<s2/i<<endl;
cout<<"数学"<<s3/i<<'\t'<<"英语"<<s4/i<<'\t'<<"政治"<<s5/i<<'\t';
cout<<"体育"<<s6/i<<endl;
}
void deletechain(node *head)//释放键表所占的空间
{
node *p1;
while(head)
{
p1=head;
head=head->next;
delete p1;
}
}
void main()//主函数
{
node *head;int num;
int a;
T:{
cout<<"************************************************"<<endl;
cout<<"***** 欢迎使用本系统(请选择你所要的功能) ****"<<endl;
cout<<" 0.退出系统. "<<endl;
cout<<" 1.成绩录入. "<<endl;
cout<<" 2.成绩修改. "<<endl;
cout<<" 3.成绩查询. "<<endl;
cout<<" 4.删除成绩. "<<endl;
cout<<" 5.输出所有人的成绩 . "<<endl;
cout<<" 6.统计平均成绩. "<<endl;
cout<<"************************************************"<<endl;
cout<<"请输入你选择的数字:";cin>>a;
}
switch(a)
{
case 0:goto end;
case 1:head=create();goto T;break;
case 2:cout<<"请输入学号:";cin>>num;modify(head,num);goto T;break;
case 3 :cout<<"请输入学号:";cin>>num;lookup(head,num);goto T;break;
case 4:cout<<"请输入学号:";cin>>num;Delete(head,num);goto T;break;
case 5:output(head);goto T;break;
case 6:statistic(head);goto T;break;
default:break;
};
end:;
cout<<"谢谢您使用本系统!"<<endl;
if(head) deletechain(head);
}
程序运行界面
课程设计总结
终于可以松口气了,经过两天多时间的思考,写源程序,上机调试.现在终于告一段落了.看到自己的劳动成果,心中不免有些惊喜,没想到自己还能独立完成初次的课程设计.
这种课程设计是枯燥无味的,但对C++这门程序语言的掌握却有非常大的作用.从开始对题目的分析,就注定摆在我这样一个对C++了解不多的新手面前的是一段艰难的旅程.但最终很庆幸的是我居然能够坚持下来,而且独立完成了设计工作.
C++是很难学的,这也许是因人而异,但对我来说确实是一个障碍.如今要自己完成一个课程设计,无疑是对自己的一个挑战.先是分析题目,这里困难不是很大,因为已有了比较完整的设计提示:有哪此数据,要用到哪些函数,都作了比较清楚的说明.其实也只是要将那些函数填完整就行了.看起来比较轻松,但实际操作起来却是比较麻烦的.由于平时对C++知识的积累较为匮乏,(这可能是最主要的原因了),所以操作起来真是寸步难行,没办法,只有拿出课本找到相应的知识点,临阵磨枪.费了一番功夫,终于写出了源程序,但这不一定就意味着万事大吉,接下来的调试更是曲折了.好不容易将程序输入进去了,一编译,错误一大堆,没办法只有一个一个找了.这接下来的工作我想是每一个和我一样的人都会遇到了,在此我就不再赘述.
但不管怎么样,我还是完成了这个设计.虽说累了点,但我想这对我们进一步掌握C++,并为下学期的C++二级考试是有很大的帮助的.能够编出程序,其实本身就是对自己的一种肯定,是对自己前面一段时间学习C++综合水平的一个检阅.当然完成后的兴喜,只有经历过了才能体会到.而我体会到了.(6/26/05)