1、一、设计分析 该设计是设计一个实用小型学生成绩管理系统。它有录入,查询,修改,删除,保存基本功能,并且能够对指定文件操作,也可将多个文件组成一个文件。 二、系统设计说明 1. 程序运行主界面 再根据用户不同需求来选择不同操作 2. 模块功能设计 2.1.建立学生基本信息 使用动态链表技术,用creat()函数实现学生基本信息录入; 2.2查询记录 (1)可以按学号方式查询记录。 (2)能给出查询记录信息。 (3) 如果查询信息不存在,输出提示信息。 2.3插入学生记录 (1)可以在已有记录后面追加新记录。 (2)可以随时增加新记录,他们仅保
2、存在向量数组中。 (3) 如果没有记录存在,给出提示信息。 2.4 修改记录 (1)可以按学号方式查找要修改记录内容。 (2)给出将被修改记录信息,经确认进行修改。 (3)如果已经是空表,应给出提示信息并返回主菜单。 (4)如果没有找需要找到修改信息,输出提示信息。 2.5 删除记录 (1)可以按学号方式删除记录。 (2)标志将被删除记录,可以再次取消标志,经确认后删除已经标志记录。 (3) 如果已经是空表,删除时应给出提示信息并返回主菜单。 (4)如果没有要删除信息,输出信息。 (5)删除操作及限于内存,只有执行存储操作时,才能覆盖原记录。 2.6 文件存储 (
3、1)可以按默认名字或者指定名字存储记录文件。 (2)更新存储标志。 三、系统技术文档 1、 系统各主要模块流程图 1.1输入数据模块 程序开始 首先输入学生的学号 再输入姓名 在提示语句下,输入学生的科目与成绩 当输入的学号为000000000 时,循环结束 将结果在显示屏上输出,并保存在文本文档中 程序结束 1.2查找信息模块 程序开始 通过学号的方式进行查找 如果没有此人,给出提示语句 输出查找的学生的学号与姓名 输出查找人的成绩 将计算结果在显示屏中显示出来 程序结束
4、 1.3修改信息模块 程序开始 通过学号进行修改 如果没有此人,给出提示语句 重新输入学生的学号与姓名 重新输入学生的各科成绩 将计算结果在显示屏上显示出来并覆盖原来的文本文档 程序结束 1.4删除信息模块 程序开始 通过学号方式进行删除 如果没有此人,给出提示信息 输入要删除学生的学号 删除该学生的所有记录 将计算结果返回到显示屏中显示出来 程序结束 2软件总体测试方案及测试记录 2.1测试方案 将程序编写完成后,开始整体测试。分别就不同模块功能进行测试,看程序是否能够正确运行
5、出结果,是否有逻辑错误。 2.2测试部分记录 (1)数据录入过程 (2)数据查询 3局部测试方案及测试记录 3.1测试方案 局部测试分别进行了数据修改及数据插入两个模块测试; 3.2测试部分记录 (1)修改模块 (2)插入信息模块 4软件调试及修改记录 4.1软件调试 软件调试采用单步调试方法,查看其运行过程。保证每一步执行和预期是一致。然后进行大量尝试不同数据进行调试,保证没有其他错误。 4.2修改记录 在整个程序编写过程中,总是伴随着程序修改。一直调试到能够正确运行出结果为止。 5测试结论 经过以上测试步骤后,软件运行结果没有任何问题
6、可以初步断定,这个软件功能是比较稳定。已经达到了设计基本要求。 6其他运行情况记录 删除后状况: 四、系统使用说明书: 1. 在visual.c++里打开“学生管理.cpp”,编译及调试,最后运行程序; 2. 根据运行界面上文字提示,选择不同任务编码,已达到不同操作功能; 五、设计体会及今后改进意见 通过这次设计,我学到了很多。首先,学会了如何建立一个动态链接即就是creat()函数;还有此次设计用到了好多链表操作,比如说:链表输出、链表插入、链表删除;这些都是有一定编程难度。再者,本次设计是一个模块划分比较清晰地程序,每个模块都有自己函数及应该实现功能;最后,用到了文
7、件操作,这是C++课最后所讲到知识;
本次设计所包含知识面比较广,所以必须要把所学知识融会贯通才行;当然,软件也有些许不足之处,比如:没有实现从母表中提取子表;软件一些细节性问题还是有待进一步完善。
参考程序:
#include
8、 { char class_0[20]; string num; //学生学号用九位字符表示,为使用方便用string类 char name[20]; string subject[6]; float average[6]; float final_score[6]; student *next; }stud[100]; //各个模块函数 char [20]; void meun(int m); //菜单函数 student *cr
9、eat() ; // 创建链表函数 void print(student *head); // 输出链表函数 void search(student *head); // 查找信息函数 void Insert(struct student *head);//插入信息函数 student *del(student *head,string num) ; void update(struct student *head) ;//修改信息函数 void Dele(student *head); //
10、 删除信息函数 //文件操作两个函数 void save() ; //保存函数 void read(); //读入函数 //菜单函数 void meun(int m) { static student *head; switch(m) { case 1: head=creat();print(head);break; case 2: Insert(head);break; case 3: search(head);break; case 4: update(
11、head);break;
case 5: Dele(head);break;
case 6: save();break;
}
}
void meun1()
{
int m;
char c;
do
{
cout<<"**************************************************"< 12、 2插入信息 ******"< 13、"< 14、入你登录密码,只有四次机会!"< 15、 cout<<"您无权使用本系统!"< 16、 cin>>p1->num;
cout<<"班级:";
cin>>p1->class_0;
cout<<"姓名:" ;
cin>>p1->name;
cout< 17、i++)
{
cout<<"科目:";
cout< 18、p1;
p2=p1;
p1=new student;
cout<<"请输入第"< 19、bject[1]="英语";
p1->subject[2]="数学";
p1->subject[3]="物理";
p1->subject[4]="化学";
p1->subject[5]="生物";
for(i=0;i<6;i++)
{
cout<<"科目:";
cout< 20、final_score[i];
cout< 21、 ";
stud[j].num=p->num;
cout< 22、ject[i]=p->subject[i];
cout< 23、tw(100)< 24、p1->num)
{
if(p1==head)
head = p1->next;
else
p2->next = p1->next;
n = n - 1;
}
else cout<<"查无此人";
return(head);
}
//判断是否能够删除信息
void Dele(student *head)
{
string del_num;
print(head);
cout<<"请输入你想删除学号:";
cin>>del_num;
while(del_num != " 25、000000000")
{
head = del(head,del_num);
print(head);
cout<<"请输入你想删除学号:";
cin>>del_num;
}
}
//查询信息
void search(student *head)
{
print(head);
if(head==NULL)
{
cout<<"这是一个空链表,无查找项"< 26、生号:";
cin>>num;
p1=head;
while(p1->num!="000000000")
{
if(p1->num==num)
{ cout< 27、rage[i]<<" ";
cout< 28、struct student *stud)
{
struct student *p0,*p1,*p2;
p1 = head;
p0 = stud;
if(head == NULL)
{
head = p1;
p0->next=NULL;
}
else
{
while((p0->num != p1->num)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num<=p1->num)
{
if(head == p1)
head = p 29、0;
else p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
n = n+1;
return(head);
}
//插入判断
void Insert(struct student *head)
{
struct student *stu;
int i;
cout<<"输入你想插入数据:"< 30、um;
cout<<"班级:";
cin>>stu->class_0;
cout<<"姓名:";
cin>>stu->name;
for(i=0;i<6;i++)
{
cout<<"科目:";
cin>>stu->subject[i];
cout<<"平时成绩:";
cin>>stu->average[i];
cout<<"期末成绩:";
cin>>stu->final_score[i];
cout< 31、ad);
while(stu->num !="000000000")
{
cout<<"输入你想插入数据:";
stu = new student ;
cout<<"学号:";
cin>>stu->num;
if(stu->num =="000000000")
{
break;
}
cout<<"班级:";
cin>>stu->class_0;
cout<<"姓名:";
cin>>stu->name;
stu->subject[0]="语文";
stu->subject[1]= 32、"英语";
stu->subject[2]="数学";
stu->subject[3]="物理";
stu->subject[4]="化学";
stu->subject[5]="生物";
for(i=0;i<6;i++)
{
cout<<"科目:";
cin>>stu->subject[i];
cout<<"平时成绩:";
cin>>stu->average[i];
cout<<"期末成绩:";
cin>>stu->final_score[ 33、i];
cout< 34、请重输入此学生数据:";
stu = new student ;
stu->num = del_num;
cout<<"班级:";
cin>>stu->class_0;
cout<<"姓名:";
cin>>stu->name;
stu->subject[0]="语文";
stu->subject[1]="英语";
stu->subject[2]="数学";
stu->subject[3]="物理";
stu->subject[4]="化学";
stu- 35、>subject[5]="生物";
for(i=0;i<6;i++)
{
cout<<"科目:";
cin>>stu->subject[i];
cout<<"平时成绩:";
cin>>stu->average[i];
cout<<"期末成绩:";
cin>>stu->final_score[i];
cout< 36、>del_num;
}
}
//信息保存
void save()
{
ofstream out);
int i,j;
if(!outfile)
{
cerr<<"open error";
exit(1);
}
for(j=0;j 37、tud[j].name<<" "< 38、)*0.3+(stud[j].final_score[i])*0.7)< 39、[j].class_0 <<" ";
cout<






