C语言程序设计报告
- 格式:doc
- 大小:1021.00 KB
- 文档页数:12
《C语言课程设计》报告
题目: 选题八:学生成绩记录薄设计
专业年级:
学号:
姓名:
指导教师:
同组设计人员:
2011年6月30日
- 1 - [问题定义]
编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:
(1)创建一个文本文件用来记录学生信息,输入至少30名学生的信息,保存在文本文件中;
(2)将文本文件中的数据读出,按学号或姓名查询成绩;
(3)能添加成绩记录;
(4)能修改指定姓名或学号的学生的成绩;
(5)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息,显示及格率和平均分,显示最高分和最低分,显示所有学生的排名(不能改变学生的学号顺序);
(6)以上信息能保存在原文本文件中。
[开发工具]
Visual C++ 6.0
[数据结构]
struct xueshengguanli
{ string name;
string banbie;
int num;
float Clanguage;
xueshengguanli *next;
};
typedef xueshengguanli* xueshengGL;
xueshengGL Input(xueshengGL head)
{ char SEL='y';
int m=0;
xueshengGL p1,p2,top;
ofstream out_stream; out_stream.open("student.txt",ios::app);
//以追加数据信息打开文件
if(out_stream.fail())
{ cout<<"打开文件失败.\n";
exit(1);
}
xueshengGL为一个定义的结构体,xueshengGL用来引导每一个单独的xueshengGL结构,其中out_stream.open("student.txt",ios::app)表示将输入的信息保存在student.txt这一个文本中。p表示一个指向结构体的指针,本题指向的就是xueshengguanli这个结构体数组。
- 2 - 学生信息管理系统
修改学生信息 删除学生信息 查找学生信息 学生综合成绩排序信息 显示学生信息
输入修改人的姓名,学号
需要修改的项
班级 C语言成绩 查找人的姓名、学号 被删除人的姓名学号 返回
显示修改后相应的信息 输入新在班级 输入新的成绩
是否继续修改 显示所查学生的信息
返回主菜单 学生分数分段
Y
N 输入学生信息
输入姓名、班级、学号C语言成绩
是否继续输入
Y
N
- 3 - [算法描述]
该程序分为八个主要模块,分为:输入学生信息,修改学生信息,删除学生信息,显示学生信息,学生成绩排序,学生成绩统计,查找学生信息,学生分数分段和返回。各模块贱的关系可以参考上图的结构。各模块单独成立,与主模块相关联,有的模块间也有一些联系。该程序需要调用文本文档,因此每次程序的执行都会与文本文档相关联。
主要结构:
当选择1时,进入学生信息输入功能:
主要代码如下:
{
p1=new xueshengguanli;
p1->next=NULL;
cout<<"\n请输入姓名:";
cin>>p1->name;
cout<<"\n请输入学号:";
cin>>p1->num;
cout<<"\n请输入班级:";
cin>>p1->banbie;
cout<<"\n请输入C语言成绩:";
cin>>p1->Clanguage;
if(m==0)
{ head=p1;
p2=head;
m=1;
}
else
{ p2->next=p1;
p2=p1;
}
cout<<"\n是否继续输入?(y/n)\n"; //判断是否继续输入
cin>>SEL;
} top=head;
//写入文件
while(head!=NULL)
{ out_stream - 4 - head=head->next; } out_stream.close(); //关闭文件 if(SEL=='n'||SEL=='N') cout<<"输入完毕.\n"; return top; //返回链表头结点地址 } 程序会将输入的学生信息保存在创建的文本文档中,以写入方式打开,文档信息可以长期保存,当第一个输入完成时,系统会提示是否输入下一个学生的信息,选择Y就会继续输入,选择N系统就会提示输入完毕,并回到主界面,让用户有充分的选择权! 下图为输入功能运行截图: 至此,学生信息的输入功能完成! - 5 - 当选择2时,进入学生信息修改功能 主要代码如下: void xuanzhe(xueshengGL top) { int h; while(h<1||h>2) { cout<<"\n请输入你要修改的项:"; cin>>h; if(h==1) { cout<<"\n请输入新的班级:"; cin>>top->banbie; break; } else if(h==2) { cout<<"\n请输入新的C语言成绩:"; cin>>top->Clanguage; break; } else cout<<"\n输入错误!请重输!\n"; } } //修改学生信息 xueshengGL Change(xueshengGL top) { string NAME; int NUM,l=0; char SEL='y'; xueshengGL q,head; cout<<"\n请输入修改人的姓名:"; cin>>NAME; cout<<"\n请输入修改人的学号:"; cin>>NUM; top=WenJian(top); q=top; while(top!=NULL) { if(top->name==NAME&&top->num==NUM) { l=1; while(SEL=='y'||SEL=='Y') { cout<<"\n 1:班级 2:C语言成绩\n"; xuanzhe(top); cout<<"\n这是修改后的学生信息:\n"; cout<<"\n姓名"<<"\t"<<"学号"<<"\t"<<"班级"<<"\t"<<"C语言成绩\n"; - 6 - cout cout<<"\n是否继续修改?(y/n)\n"; cin>>SEL; } if(SEL=='n'||SEL=='N') cout<<"输入完毕,任意键返回\n"; break; } else top=top->next; } 当选择修改选项这一项时,系统就会提示用户要修改的学生姓名和学号,当输入错误时,系统会提示:对不起,没有你要修改的人。输入正确时,系统会提示用户需要修改的班级或C语言成绩。输入完成时,系统会把修改后的学生信息输出让用户检查是否输错,提示是否继续修改。 //修改后学生信息写入文件 if(l==1) { head=q; ofstream out_stream; out_stream.open("student.txt",ios::trunc); //以覆盖文件原数据方式打开文件 if(out_stream.fail()) { cout<<"打开文件失败.\n"; exit(1); } while(head!=NULL) { out_stream head=head->next; } out_stream.close(); } else cout<<"\n对不起,没有你要修改的人.\n\n"; return q; } 系统会将修改后的学生信息以覆盖文件原数据方式存储在student.txt文本文档中。修改学生信息时,系统也是从student.txt文本文档调取信息。 以下为过程截图: