学生成绩信息管理系统_第1页
学生成绩信息管理系统_第2页
学生成绩信息管理系统_第3页
学生成绩信息管理系统_第4页
学生成绩信息管理系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学生成绩信息管理系统1引言...............................................11.1设计目的与要求..................................11.2设计内容.........................................12系统需求与功能分析...................................12.1系统需求分析....................................22.2系统功能分析.....................................23总体结构设计.........................................33.1系统的结构设计...................................33.2系统管理流程图...................................34系统详细设计和系统实现...............................45系统测试...........................................106结束语.............................................15参考文献.............................................15附录1:链表结构化设计源程序清单.....................16附录2:顺序表结构化设计源程序清单...........................................261引 言1.1 设计目的与要求该学生信息管理系统采用 C++语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。它能使学生信息数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生信息管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。程序要添加适当的注释,程序的书写要采用缩进格式。程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。1.2设计内容定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:根据指定学生个数,逐个输入学生信息;逐个显示学生表中所有学生的相关信息;根据姓名进行查找,返回此学生的学号和成绩;根据指定的位置可返回相应的学生信息(学号,姓名,成绩);给定一个学生信息,插入到表中指定的位置;删除指定位置的学生记录;统计表中学生个数。系统需求与功能分析2.1 系统需求分析能完成学生信息的插入、查询、修改、删除、输出等功能;采用单链表与顺序表存储结构实现;所有数据以外部文件方式保存。2.2系统功能分析要设计一个学生成绩管理系统,其功能包括:①插入函数Add():将学生成绩信息插入到链表中;②查询函数Search():分别可以按学号和按姓名进行学生成绩查询;③删除函数 Delete() :当需要删除的学号和姓名一致时则删除对应的学生记录;④修改函数 Modify() :修改指定的学生成绩信息;⑤输出函数 Show():输出全部学生成绩信息;⑥菜单函数 Menu():为程序的菜单函数为实现各种功能提供便捷;⑦读取数据函数 Read():从外部文件读取学生成绩信息;⑧保存数据函数 Save():将数据保存到外部文件中。总体结构设计3.1系统的结构设计通过对学生信息管理系统的功能分析,可以定义出系统的总体结构模块图,如图3.1所示。学生成绩管理系统学学学学学学学生生生生生生生信信信信信信信息息息息息息息插查删修输读保入询除改出取存图3.1学生管理系统总体结构设计3.2系统管理流程图前面的分析中已经定义了系统各个模块,属于静态建模的范围。在系统运行时刻的动态模型应该由系统的流程决定。当用户运行该系统后可以来进行学生信息插入管理、学生信息查询管理、学生信息删除管理、学生信息修改管理及学生信息输出等操作,具体的流程如图3.2所示。查询修改进入系统 数据读入删除输出图3.2系统流程图

不保存YN数据保存 退出系统主模块应负责应用程序的主界面,由它调用其他模块.因此主模块应具有操作性好、界面清晰的特点,使用户能够很方便地找到所需功能。根据功能需求的结果分析,主界面应该由学生信息插入管理,学生信息查询管理、学生信息修改管理、学生信息删除管理和学生信息输出管理组成,可以通过输入相应的数字进入相应的功能模块。链表学生信息管理系统详细设计和系统实现系统总体设计完成后,就可以根据需求对各个模块来进行实现了。在本系统中需要编码实现的主要有学生信息插入、学生信息查询、学生信息修改、学生信息删除和学生信息输出等 5个模块。学生信息插入模块添加的信息包括学号 (不允许重复)、姓名(不允许重复)、分数。流程图如下图 4.1所示。开始插入数据输入学生信息调用类成员函数采用单链表保存数据结束图4.1插入模块流程图本程序采用的是尾插法,就是每次将新申请的结点插在终端结点的后面,其执行过程如图 4.2所示。图4.2尾插法建立单链表操作示意图学生信息查询模块按姓名和学号查找学生信息的流程图分别如下图 4.3所示。按姓名查找开始输入要查找姓名判断NY输出该学生的信息 抱歉没有该学生结束图4.3按姓名查找学生信息流程图在单链表中,即使知道被访问结点的位置 i,也不能像顺序表那样直接按序号访问,而只能从头指针出发,设置一个工作指针

p,顺

next

域逐个结点往下搜索。当

p指向某个结点时判断是否为第

i个结点,若是则查找成功;否则,将工作指针

p后移,即将

p指向原来所指结点的后继结点。

直到

p为

NULL时查找失败。单链表查找过程如图

4.4所示。图4.4单链表查找过程的示意图按学号查询学生信息同按姓名查找学生信息,此处不再详细列出。学生信息修改模块首先要查找与要修改数据相匹配的信息,若没有则返回失败。否则把相应的信息输出, 然后再重新输入新的数据并保存到单链表。学生信息删除模块当选择删除功能时,首先输入要删除的同学的姓名,然后输入要删除的同学的学号,如果该同学存在并且姓名与学号匹配的上,则进行删除操作,否则返回失败。其流程图 4.5如下:开始删除操作输入姓名输入学号姓名学号一致YN执行删除功能返回主菜单图4.5删除学生信息模块流程图删除操作定义为将单链表的第i个结点删去。因为在单链表中结点

ai

存储地址在其前驱结点

ai-1

的指针域,所以必须首先找到

ai-1的存储地址

p,然后令

p的

next

域指向

ai

的后继结点,即把结点ai

从链上摘下来,最后释放结点

ai

的存储空间,如图

4.6所示。图4.6在单链表中删除结点指针的变化情况学生信息输出模块从单链表表头遍历整个单链表,将所有数据输出。其部分代码如下:voidFunction::Show(){charchoose;Student*temp;system("cls");temp=Student_First->Next;if(!temp){cout<<"文件无数据\n\n"<<endl;cout<<"1.返回主菜单"<<endl;cin>>choose;while(choose!='1'){ cout<<"1. 返回主菜单"<<endl;cin>>choose;}Menu();}else{ cout<<"姓名\t 学号\t 语文成绩\t 数学成绩\t 英语成绩\n";while(temp!=NULL){temp->Out();temp=temp->Next;}}cout<<"1. 返回主菜单"<<endl;cin>>choose;while(choose!='1'){cout<<"1.返回主菜单"<<endl;cin>>choose;}Menu();}系统测试在完成了系统各方面的设计后,并不是可以运行就完成的,为了保证系统性能的稳定性跟安全性等,就要对系统做测试。测试环境如下:硬件:P4C2.4GHz,80GB硬盘,512M内存;软件

:WindowsXPPersonal

SP2,分辨率

1024*768,MicrosoftVisualC++6.0

。1.这是链表的主界面这是顺序表的主界面图5.1运行主界面我就以顺序表为例介绍一下我的学生信息管理系统吧选择1清空学生信息功能时,如图 5.2所示。图5.2插入学生成绩信息实现②返回主菜单后选择 3插入学生成绩信息, 4删除学生信息,运行结果按由姓名特定位置删除和按学号删除两种分别如图5.3和图5.4所示。图5.3按学生学号查找相关信息实现图5.4按学号查找相关信息实现③当在主菜单中选择 4时,则进行删除功能。其运行结果如图5.5所示。图5.5删除学生信息功能实现⑤当在主菜单中选择6时,则进行显示当前信息功能。其运行结果如图5.7所示。图5.7输出学生信息功能实现6结束语通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构+算法=程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题。参考文献[1] 钱新贤,杨猛,程兆炜,张少东. VisualC++ 编程疑难详解.北京:人民邮电出版社,2000[2] 王红梅,胡明,王涛.数据结构 (C++)[M].北京:清华大学出版社,2007程学先.数据库原理与技术[M].北京:中国水利水电出版社,2001[4]AlexKriegel&BorisM.Trukhnov .SQLBible[M] .北京:电子工业出版社, 2000[5] 郑章,程刚,张勇. VisualC++6.0 数据开发技术[M].北京:机械工业出版社, 1999.9[6] F.BrokkenandK.Kubat.C++Annotations

.Version

,ICCE,UniversityofGroningen ,Netherlands

,1990.250~280附录1:链表结构化设计源程序清单程序名称:Student.CPP程序功能:采用链表与文件实现一个简单的学生成绩管理系统。#include<iostream>#include<fstream>#include<cstring>#include<conio.h>#include<ctime>usingnamespacestd;structClass{ intChinese;intMath;intEnglish;};classStudent{public:Student();voidOfile(ofstream&of);voidInfile(ifstream&f);voidOut();voidSet(char*name,intno,Classscore);char*GetName();intGetNo();Student*Next;protected:charName[20];intNo;ClassScore;};Student::Student():Next(0){}char*Student::GetName(){returnName;}intStudent::GetNo(){returnNo;}voidStudent::Set(char*name,intno,Classscore){strcpy(Name,name);No=no;Score=score;}voidStudent::Infile(ifstream&f){f>>Name>>No>>Score.Chinese>>Score.Math>>Score.English;//将数据输入到文件}voidStudent::Ofile(ofstream&of){

of<<"

"<<Name<<"

"<<No<<"

"<<Score.Chinese<<""<<Score.Math<<""<<Score.English;

//

从文件中提取数据}voidStudent::Out(){cout<<Name<<"\t"<<No<<"\t"<<Score.Chinese<<"\t\t"<<Score.Math<<"\t\t"<<Score.English<<"\t"<<endl;}classFunction // 功能类{public:Function(); // 构造函数~Function(); // 析构函数voidMenu(); // 菜单函数voidAdd(); // 录入学生成绩函数voidSearch(); // 查询学生成绩函数voidDelete();

//

删除学生成绩函数voidModify();

//

修改学生成绩函数voidShow();

//

显示学生成绩函数private:Student*Student_First;voidRead();

//

读取学生成绩函数voidSave();

//

保存学生成绩信息函数};Function::Function(){Student_First=newStudent;Read();}Function::~Function(){deleteStudent_First;}voidFunction::Add() // 录入学生成绩信息函数{charname[20];intno;Classscore;charchoose;Student*f1,*p,*f2;system("cls");f1=Student_First;f2=Student_First->Next;while(f1->Next)f1=f1->Next;do{p=newStudent;cout<<"请输入您要添加的学生成绩信息:"<<endl;cout<<"请输入学生姓名:";cin>>name;while(f2){if(strcmp(f2->GetName(),name)==0){cout<<"该学生已存在,请确定姓名!\n\n";cout<<"请输入姓名:";cin>>name;break;}f2=f2->Next;}cout<<"请输入学号:";cin>>no;cout<<"请输入语文成绩 :";cin>>score.Chinese;cout<<"请输入数学成绩 :";cin>>score.Math;cout<<"请输入英语成绩 :";cin>>score.English;p->Set(name,no,score);f1->Next=p;p->Next=NULL;f1=f1->Next;cout<<"是否继续输入信息 ?(Y\\N)"<<endl;cin>>choose;}while(choose=='y'||choose=='Y');Save();cout<<"1. 返回主菜单"<<endl;cin>>choose;while(choose!='1'){cout<<"1.返回主菜单"<<endl;cin>>choose;}Menu();}voidFunction::Delete()

//

删除信息函数{charname[20];intno;charchoose;Student*temp,*p;system("cls");p=temp=Student_First->Next;cout<<" 请输入姓名:";cin>>name;cout<<"输入学号:";cin>>no;while(temp){if(strcmp(temp->GetName(),name)==0&&temp->GetNo()==no)判断该学生信息是否存在{cout<<"姓名\t学号\t语文成绩\t数学成绩\t英语成绩\n";temp->Out();cout<<"\n是否删除(Y/N)";cin>>choose;if(choose=='y'||choose=='Y'){p->Next=temp->Next;deletetemp;cout<<"删除成功:\n";}break;}p=temp;temp=temp->Next;}Save();cout<<"1. 返回主菜单\n2.继续删除"<<endl;cin>>choose;while(choose!='1'&&choose!='2'){cout<<"1.返回主菜单\n2.继续删除"<<endl;cin>>choose;}if(choose=='1')Menu();elseif(choose=='2')Delete();}voidFunction::Modify()

//

修改学生信息函数{charchoose,name[20];Student*temp,*p;intno;Classscore;system("cls");temp=p=Student_First;cout<<"请输入您要修改的学生姓名 :";cin>>name;while(temp){if(strcmp(temp->GetName(),name)==0){ cout<<"姓名\t 学号\t 语文成绩\t 数学成绩\t 英语成绩\n";temp->Out();cout<<" 请输入姓名:";cin>>name;cout<<" 请输入学号:";cin>>no;cout<<"请输入语文成绩 :";cin>>score.Chinese;cout<<"请输入数学成绩 :";cin>>score.Math;cout<<"请输入英语成绩 :";cin>>score.English;temp->Set(name,no,score);break;}temp=temp->Next;}Save();cout<<"修改成功!"<<endl;cout<<"1. 返回主菜单\n2.继续修改"<<endl;cin>>choose;while(choose!='1'&&choose!='2'){cout<<"1.返回主菜单\n2.继续修改"<<endl;cin>>choose;}if(choose=='1')Menu();elseif(choose=='2')Modify();}voidFunction::Read() // 读取信息函数{Student*p,*p2;p=Student_First;longt;ifstreamis("Student.txt",ios::in);if(!is){ ofstreamos("Student.txt",ios::out);os.close();return;}while(!is.eof()){p2=newStudent;p2->Infile(is);p->Next=p2;p2->Next=NULL;p=p->Next;}}voidFunction::Save()

//

保存学生成绩信息函数{ofstreamof("Student.txt",ios::out);Student*p=Student_First->Next;while(p){p->Ofile(of);p=p->Next;}of.close();}voidFunction::Search(){intflag(0);charchoose;chart1[20];intt2;system("cls");Student*temp=Student_First->Next;do{cout<<"输入查询方式:\n1.按姓名查询\n2.按学号查询\n";cin>>choose;if(choose=='1'){cout<<"请输入您要查询的姓名:";cin>>t1;while(temp){if(strcmp(t1,temp->GetName())==0){flag=1;break;}temp=temp->Next;}if(flag==0)cout<<"\n无该学生的信息\n"<<endl;else{ cout<<"姓名\t 学号\t 语文成绩\t 数学成绩\t 英语成绩\n";temp->Out();}break;}elseif(choose=='2'){cout<<"请输入您要查询的学号";cin>>t2;while(temp){if(t2==temp->GetNo()){flag=1;break;}temp=temp->Next;}if(flag==0)cout<<"\n无该学生的信息\n"<<endl;else{ cout<<"姓名\t 学号\t 语文成绩\t 数学成绩\t 英语成绩\n";temp->Out();}break;}}while(choose!='1'||choose!='2');cout<<"\n1. 返回主菜单\n2.继续查询"<<endl;cin>>choose;while(choose!='1'&&choose!='2'){cout<<"1.返回主菜单\n2.继续查询"<<endl;cin>>choose;}if(choose=='1')Menu();elseif(choose=='2')Search();}voidFunction::Show(){charchoose;Student*temp;system("cls");temp=Student_First->Next;if(!temp){cout<<"文件无数据\n\n"<<endl;cout<<"1. 返回主菜单"<<endl;cin>>choose;while(choose!='1'){cout<<"1.返回主菜单"<<endl;cin>>choose;}Menu();}else{cout<<"姓名\t学号\t语文成绩\t数学成绩\t英语成绩\n";while(temp!=NULL){temp->Out();temp=temp->Next;}}cout<<"1. 返回主菜单"<<endl;cin>>choose;while(choose!='1'){cout<<"1.返回主菜单"<<endl;cin>>choose;}Menu();}voidFunction::Menu(){ time_tt;time(&t);charchoose;system("cls");cout<<" ------------------------

版 权 所 有 : 李 卉-------------------------"<<endl;cout<<endl;cout<<"***********************************************************"<<endl;cout<<"

平顶山学院欢迎你"<<endl<<endl;cout<<"

学生成绩信息管理系统"<<endl<<endl;cout<<"

显示系统时间和日期

:

"<<ctime(&t)<<endl;cout<<"*********************************************************"<<endl<<endl;cout<<"请选择您需要的操作 ,选择相关操作请输入相对的括号里的阿拉伯数字 !"<<endl;cout<<"\n";cout<<"1录入学生成绩信息:\n"<<endl;cout<<"2查询学生成绩信息:\n"<<endl;cout<<"3删除学生成绩信息:\n"<<endl;cout<<"4修改学生成绩信息:\n"<<endl;cout<<"5显示全部学生成绩信息:\n"<<endl;cout<<"6退出系统"<<endl;cout<<"\n";cin>>choose;switch(choose){case'1':Add();break;case'2':Search();break;case'3':Delete();break;case'4':Modify();break;case'5':Show();break;case'6':exit(1);break;default:{cout<<"请按规定输入选择项!"<<endl;Menu();}}}voidmain(){ Functionfunction;

//

定义功能接口function.Menu();

//

调用主菜单}附录2:链表结构化设计源程序清单#defineLIST_INIT_SIZE10// 确定分配空间大小#include<string.h>#include<malloc.h>#include<iostream.h>#include<conio.h>//getch()#include<stdlib.h>typedefstructstudent{//学生信息结构体类型charNo[100];charname[7];floatscore;};typedefstruct{//student*stu;intlength; //intlistsize;}sqlist;

//

定义顺序类型 sqlist指向数据元素的基地址线性表的当前长度下面是函数的原型声明intInitlist(sqlist&sl);//顺序表初始化intcreat(sqlist&sl);//顺序表的建立intinsertlist(sqlist&sl,studentelem,intpos);//顺序表的插入操作intsearch(sqlistsl,intpos);//按指定位置删除intdele_elem1(sqlist&sl,intpos,student&elem);//顺序表的按位置删除操作intdele_elem2(sqlist&sl,char*num,student&elem);//顺序表的按学号删除intout_list(sqlistsl);// 顺序表的输出操作//////// 主函数///////////voidmain(){cout<<"\n\n欢迎使用学生信息查询系统,请按提示使用!\n\n\n";sqlistsl;Initlist(sl);students;charnumber[9];intpos;while(1){cout<<"\ncout<<"\n 0126

以下程序是使用顺序表实现的: \n";程正炉请您选择您要执行的操作:

\n";cout<<endl<<endl;cout<<"1、清空顺序表2、创建顺序表3、插入信息4、删除信息5、查找信息6、显示当前信息0、退出系统`\n";cout<<" \n 请从序号0--6中选择,继续你所需要的工作 ";intn;charc;cin>>n;if(n==0)// 退出{cout<<"\n 谢谢您的使用,该系统是 11电商一班的程正炉设计,多谢你的使用! \n";break;}elseif(n==1)//{

清空cout<<"

此操作将清空顺序表,您是否继续?输入

n表示你要退出,输入其他任意键继续你需要的工作

\n";cin>>c;if(c==n) break;else {Initlist(sl);cout<<"他操作!\n\n";}}elseif(n==2)// 创建{

顺序表已清空

!您可以继续其cout<<"\n

此操作将创建顺序表,您是否继续?输入

n表示你要退出,输入其他任意键继续你需要的工作 \n";cin>>c;if(c==n) break;elsecreat(sl);}elseif(n==3)// 插入{cout<<"输入插入学生信息: \n";cout<<"请输入学生学号 :";cin>>s.No;cout<<"请输入学生姓名 :";cin>>;cout<<"请输入学生成绩 :";cin>>s.score;insertlist(sl,s,pos);}elseif(n==4)// 删除功能{intm;cout<<"1、我想按输入特定位置删除 \n";cout<<"2、我想按输入学生学号删除 \n";cout<<"请您选择:"; cin>>m;cout<<endl;if(m==1){dele_elem1(sl,pos,s);}elseif(m==2){cout<<"输入您要删除的学生学号 :";cin>>number;dele_elem2(sl,number,s);cout<<endl; }}elseif(n==5){intnum;cout<<"请输入您要查找的学生学号 :";cin>>num;search(sl,num);}elseif(n==6)// 显示out_list(sl);elseif(n!=0||n!=1||n!=2||n!=3||n!=4||n!=5||n!=6)cout<<"您的输入有误,请重新输入 !\n";}//while}函数定义////////////////////////////intInitlist(sqlist&sl){ sl.stu =(student*)malloc(LIST_INIT_SIZE*sizeof(student));if(!sl.stu){return0;cout<<"分配失败!\n";}sl.length=0;sl.listsize=LIST_INIT_SIZE;return1;}创建操作/////intcreat(sqlist&sl){cout<<"下面创建学生信息查询系统,请按提示输入数据 :\n";sl.length=0; intm;// 用于记数cout<<"您一共要建立多少名学生数据 ?\n";cin>>m;cout<<" 名\n"; for(inti=1;i<=m;i++){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";return1;}////// 插入操作/////intinsertlist(sqlist&sl,studentelem,intpos){cout<<"请输入您要插入信息的位置 :\n";cin>>pos;if(pos<1||pos>sl.length+1){cout<<"您要插入的位置不存在,请检查!\n";return0;}structstudent*p;for(p=sl.stu;p<sl.stu+sl.length;p++)if(strcmp(p->No,elem.No)==0)它学号

{ cout<<" 对不起!输入的学号已存在,请输入其!\n";cout<<" 该学号在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论