当前位置:文档之家› 成绩记录簿

成绩记录簿

C++课程设计试验报告制作学生成绩簿学院:信息科学与技术班级:07级电子信息工程2班学号:2007082067姓名:刘玲丽指导老师:常耀辉C++课程设计实验报告一、设计目的用Visual C++编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。

具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;(3)按学号或姓名查询成绩;(4)添加成绩记录;(5)修改指定姓名或学号的学生的成绩并可存盘;(6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。

设计报告格式:二、总体设计(程序设计组成框图、流程图)三、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)1、定义结构体类型student 、sqlis,结构体中存放各种数据。

2、声明函数原型。

Initlist函数的功能是顺序表初始化creat函数的功能是顺序表的建立insertlist函数的功能是顺序表的插入操作search函数的功能是按指定位置删除dele_elem1函数的功能是顺序表的按位置删除操作dele_elem2函数的功能是顺序表的按学号删除out_list函数的功能是顺序表的输出操作out_coun函数的功能是输出各分数段的学生信息3、调用Initlist函数,初始化顺序表。

Initlist函数的形参是sqlist类型的引用,分配空间,初始化顺序表。

4、在主函数中用while语句循环执行,在while语句中嵌套if语句,对执行何种操作进行判断,并调用其函数,执行操作。

(1)定义整型变量n(2)若n=0,退出循环,程序运行结束。

(3)若n=1,调用Initlist函数,Initlist函数的形参是sqlist类型的引用,分配空间,顺序表初始化,并用if语句判断。

(4)若n=2, 调用creat函数,顺序表的建立,并用if语句判断。

creat函数的形参是sqlist 类型的引用,定义整型变量m,表示输入多少组学生数据,用for循环,输入m组学生的数据,sl.length用于记住组数。

(5)若n=3,输入要插入学生的学号姓名,调用insertlist函数,插入数据。

insertlist函数的形参是sqlist类型的引用,结构体变量,整形变量。

用if语句判断插入位置和学生学号是否相同。

插入数据时用到的知识点是指针。

(6)若n=4,删除学生数据,1表示:我想按输入特定位置删除;2表示:我想按输入学生学号删除。

若选择1,调用dele_elem1函数,特定位置删除。

输入整型变量,用if语句判断删除的元素是否存在,删除元素时用到指针和for循环;若选择2输入学号,调用dele_elem2函数,按学号删除。

dele_elem2函数的形参是sqlist的引用sl,指向char 型数据的指针num,student类型的引用elem。

函数内部用到指针,for语句,if语句进行删除操作。

(7)若n=5, 输入数值,调用search函数,查找学生信息。

search函数的形参是sqlist类型的引用,整形变量,在函数体中直接输出数据。

(8)若n=6,调用out_list函数,输出学生信息。

函数体中用if语句判断,如在未建立顺序表调用此函数,则输出:现在还没有任何信息或信息被删除!您可以先建立顺序表!;如已经建立了顺序表,则调用for语句输出信息。

(9)若n=7,调用out_count函数,分断输出学生信息。

用for语句和if语句嵌套调用,分段输出。

4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施四、源程序#define LIST_INIT_SIZE 10 //确定分配空间大小#include <string.h>#include <malloc.h>#include <iostream.h>#include <conio.h>#include <stdlib.h>typedef struct student //学生信息结构体类型{char No[9];char name[7];float score;}student; //用typedef声明类型,student是一个新类名typedef struct sqlist //定义顺序类型sqlist{student *stu;int length;int listsize;}sqlist; //用typedef声明类型,sqlist是一个新类名//下面是函数的原型声明int Initlist(sqlist &sl); //顺序表初始化int creat(sqlist &sl);//顺序表的建立int insertlist(sqlist &sl,student elem,int pos);//顺序表的插入操作int search(sqlist sl,int pos);//查找信息int dele_elem1(sqlist &sl,int pos,student &elem);//顺序表的按位置删除操作int dele_elem2(sqlist &sl,char *num,student &elem);//顺序表的按学号删除int out_list(sqlist sl);//顺序表的输出操作int out_count(sqlist &s1);//输出各分数段的学生信息void main() //主函数{cout<<"\n\n欢迎使用学生信息查询系统,请按提示使用!\n\n\n";sqlist sl;Initlist(sl); //调用Initlist函数,初始化顺序表student s;char number[9];int pos;while(1) //用while语句构成循环,多次执行操作{cout<<" \n ~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~\n"; cout<<endl<<endl;cout<<" `````````````````````````````````````````````\n";cout<<" ` 1、清空顺序表`\n";cout<<" ` 2、创建顺序表`\n";cout<<" ` 3、插入信息`\n";cout<<" ` 4、删除信息`\n";cout<<" ` 5、查找信息`\n";cout<<" ` 6、显示当前信息`\n";cout<<" ` 7、显示各分数段的学生信息`\n";cout<<" ` 0、退出系统`\n";cout<<" `````````````````````````````````````````````\n";cout<<"\n请从序号0--7中选择:";int n;char c;cin>>n;if(n==0)//退出{cout<<"\n谢谢您的使用,再见!\n";break;}else if(n==1)//清空{cout<<"此操作将清空顺序表,您是否继续?(n退出,其他任意键继续)\n"; cin>>c;if(c==n)break;else{ Initlist(sl);cout<<"顺序表已清空!您可以继续其他操作!\n\n";} //清空顺序表}else if(n==2)//创建{cout<<"\n此操作将创建顺序表,您是否继续?(n退出,其他任意键继续)\n"; cin>>c;if(c==n)break;else creat(sl); //调用creat函数,创建顺序表}else if(n==3)//插入{cout<<"输入插入学生信息:\n";cout<<"学生学号:";cin>>s.No;cout<<"学生姓名:";cin>>;cout<<"学生成绩:";cin>>s.score;insertlist(sl,s,pos); //调用insertlist函数,插入顺序表else if(n==4)//删除{int m;cout<<"1、我想按输入特定位置删除\n";cout<<"2、我想按输入学生学号删除\n";cout<<"请您选择:";cin>>m;cout<<endl;if(m==1) //特定位置删除{dele_elem1(sl,pos,s); //调用dele_elem1函数,特定位置删除}else if(m==2){cout<<"输入您要删除的学生学号:";cin>>number;dele_elem2(sl,number,s); //调用dele_elem2函数,特定位置删除cout<<endl;}}else if(n==5) //查找{int num;cout<<"请输入您要查找的学生位置:";cin>>num;search(sl,num); //调用search函数,查找学生信息}else if(n==6)//显示out_list(sl);else if(n==7)out_count(sl);else if(n!=0||n!=1||n!=2||n!=3||n!=4||n!=5||n!=6||n!=7)cout<<"您的输入有误,请重新输入!\n";}//while}/////函数定义////////////////////////////int Initlist(sqlist &sl) //顺序表初始化{sl.stu =(student *)malloc(LIST_INIT_SIZE*sizeof(student));if(!sl.stu){return 0;cout<<"分配失败!\n";}sl.length=0;sl.listsize=LIST_INIT_SIZE;return 1;}int creat(sqlist &sl) //顺序表的建立{cout<<"下面创建学生信息查询系统,请按提示输入数据:\n"; sl.length=0;int m; //用于记数cout<<"您一共要输入多少组学生数据?\n";cin>>m;cout<<"组\n";for(int i=1;i<=m;i++) //用for循环,输入m组学生的数据{cout<<"请输入第"<<i<<"个同学的学号:";cin>>sl.stu[i-1].No;cout<<endl;cout<<"请输入第"<<i<<"个同学的姓名:";cin>>sl.stu[i-1].name ;cout<<endl;cout<<"请输入第"<<i<<"个同学的成绩:";cin>>sl.stu[i-1].score ;cout<<endl;sl.length++; //用于记数}cout<<"\n本次操作您一共输入了"<<m<<"组数据\n";return 1;}int insertlist(sqlist &sl,student elem,int pos) //顺序表的插入操作{cout<<"请输入您要插入信息的位置:\n";cin>>pos;if(pos<1||pos>sl.length+1)cout<<"您要插入的位置不存在,请检查!\n";return 0;}student *p;for(p=sl.stu;p<sl.stu+sl.length;p++)if(strcmp(p->No,elem.No )==0) //判断是否是同一学号{cout<<"输入的学号已存在!\n";cout<<"该学号在系统中代表的信息为:\n";cout<<"学号:"<<p->No<<endl;cout<<"姓名:"<<p->name<<endl;cout<<"成绩:"<<p->score<<endl;return 0;}student *q; //插入q=&(sl.stu[pos-1]);for(p=&(sl.stu[sl.length-1]);p>=q;--p)*(p+1)=*p;*q=elem;++sl.length;cout<<"\n插入已成功,要检查请看输出!\n";return 1;}int search(sqlist sl,int pos) //查找信息{cout<<"查找中...\n";if(pos<1||pos>sl.length){cout<<"对不起,您要查找的学生不存在,请检查!\n";return 0;}cout<<"以下是您要找的学生信息:\n\n";cout<<"学生姓名:"<<sl.stu[pos-1].name<<endl;cout<<"学生学号:"<<sl.stu[pos-1].No <<endl;cout<<"学生成绩:"<<sl.stu[pos-1].score<<endl<<endl;return 1;}int dele_elem1(sqlist &sl,int pos,student &elem) //顺序表的按位置删除操作{cout<<"请输入您要删除元素的位置:";cin>>pos;if(pos<1||pos>sl.length){cout<<"您要删除的元素不存在,请检查!\n";return 0;}struct student *p,*q; //删除p=&(sl.stu[pos-1]);elem=*p;q=sl.stu+sl.length-1;for(++p;p<=q;++p)*(p-1)=*p;--sl.length;cout<<"已删除,请检查输出!\n\n";return 1;}int dele_elem2(sqlist &sl,char *num,student &elem) //顺序表的按学号删除操作{student *q,*p;p=sl.stu;q=sl.stu+sl.length-1;int flag=0;for(p;p<=q;p++){if(strcmp(num,p->No)==0){elem=*p;flag=1;}if(flag)break;}if(flag){for(++p;p<=q;++p)*(p-1)=*p;--sl.length;cout<<"已删除!检查输出看是否符合您的要求!\n\n";return 1;}else{cout<<"不存在该学号代表的学生信息!\n";return 0;}}int out_list(sqlist sl) //顺序表的输出操作{if(sl.length==0){cout<<"\n\n~现在还没有任何信息或信息被输出!您可以先建立顺序表!~\n\n";return 0;}else{cout<<"\n这是您要求的信息显示:\n";struct student *q;q=sl.stu;int count=0;for(q;q<sl.stu+sl.length;q++){count++;cout<<endl;cout<<"第"<<count<<"条:"<<endl;cout<<"学号:"<<q->No<<endl;cout<<"姓名:"<<q->name<<endl;cout<<"成绩:"<<q->score<<endl;cout<<"||||||||||||||||||||||||\n";}cout<<"~~~共有信息"<<sl.length<<"条~~~\n\n";}//elsereturn 1;}int out_count(sqlist &sl) //输出各分数段的学生信息{//cout<<"输出各分数段的学生信息"<<endl;for(int i=1;i<sl.length+1;i++)if(sl.stu[i-1].score <60.0) cout<<"60分以下学生信息"<<sl.stu[i-1].No<<sl.stu[i-1].name<<endl; else if(sl.stu[i-1].score >=60.0&&sl.stu[i-1].score <79.0) cout<<"60~79学生学号、姓名"<<sl.stu[i-1].No<<" "<<sl.stu[i-1].name<<endl;else if(sl.stu[i-1].score >=80.0&&sl.stu[i-1].score <89.0) cout<<"80~89学生学号、姓名"<<sl.stu[i-1].No<<" "<<sl.stu[i-1].name<<endl;else if(sl.stu[i-1].score >=90.0&&sl.stu[i-1].score <100.0) cout<<"90分以上学生学号、姓名"<<sl.stu[i-1].No<<" "<<sl.stu[i-1].name<<endl;return 0;}五、运行结果(1)第一次运行欢迎使用学生信息查询系统,请按提示使用!~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:2 //创建顺序表此操作将创建顺序表,您是否继续?(n退出,其他任意键继续) g下面创建学生信息查询系统,请按提示输入数据:您一共要输入多少组学生数据?3组请输入第1个同学的学号:001请输入第1个同学的姓名:fgj请输入第1个同学的成绩:65请输入第2个同学的学号:002请输入第2个同学的姓名:wert请输入第2个同学的成绩:94请输入第3个同学的学号:003请输入第3个同学的姓名:uiu请输入第3个同学的成绩:84本次操作您一共输入了3组数据~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:6 //显示当前信息这是您要求的信息显示:第1条:学号:001姓名:fgj成绩:65||||||||||||||||||||||||第2条:学号:002姓名:wert成绩:94||||||||||||||||||||||||第3条:学号:003姓名:uiu成绩:84||||||||||||||||||||||||~~~共有信息3条~~~~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:1 //清空顺序表此操作将清空顺序表,您是否继续?(n退出,其他任意键继续) j顺序表已清空!您可以继续其他操作!~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:6~现在还没有任何信息或信息被删除!您可以先建立顺序表!~~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:3 //插入信息输入插入学生信息:学生学号:004学生姓名:juu学生成绩:84请输入您要插入信息的位置:1插入已成功,要检查请看输出!~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:6这是您要求的信息显示:第1条:学号:004姓名:juu成绩:84||||||||||||||||||||||||~~~共有信息1条~~~~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:4 //删除信息1、我想按输入特定位置删除2、我想按输入学生学号删除请您选择:1 //特定位置删除请输入您要删除元素的位置:1已删除,请检查输出!~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:6~现在还没有任何信息或信息被删除!您可以先建立顺序表!~ ~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:0谢谢您的使用,再见!Press any key to continue(2)第二次运行欢迎使用学生信息查询系统,请按提示使用!~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:2 //创建顺序表此操作将创建顺序表,您是否继续?(n退出,其他任意键继续) g下面创建学生信息查询系统,请按提示输入数据:您一共要输入多少组学生数据?3请输入第1个同学的学号:001请输入第1个同学的姓名:fgj请输入第1个同学的成绩:65请输入第2个同学的学号:002请输入第2个同学的姓名:wert请输入第2个同学的成绩:94请输入第3个同学的学号:003请输入第3个同学的姓名:uiu请输入第3个同学的成绩:84本次操作您一共输入了3组数据~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:6 //显示当前信息这是您要求的信息显示:第1条:学号:001姓名:fgj成绩:65||||||||||||||||||||||||第2条:学号:002姓名:wert成绩:94||||||||||||||||||||||||第3条:学号:003姓名:uiu成绩:84||||||||||||||||||||||||~~~共有信息3条~~~~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~`````````````````````````````````````````````` 1、清空顺序表`` 2、创建顺序表`` 3、插入信息`` 4、删除信息`` 5、查找信息`` 6、显示当前信息`` 7、显示各分数段的学生信息`` 0、退出系统``````````````````````````````````````````````请从序号0--7中选择:。

相关主题