求助!有一个学生信息管理系统,求注释 越详细越好 越快越好 后面还有追加分数 小弟在此拜谢了!

2024-12-26 20:20:32
推荐回答(5个)
回答1:

编辑本段定义
  学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。推行学校信息管理系统的应用是进一步推进学生学籍管理规范化、电子化、控制辍学和提高义务教育水平的重要举措
编辑本段产生背景
  学生信息档案的管理对于学校的管理者来说至关重要,学生信息是高等学校非常重要的一项数据资源,是一个教育单位不可缺少一部分。特别是近几年来,国家政策的调整,我国高等院校大规模的扩招,给高等院校的教学管理、学生管理、后勤管理等方面都带来不少的冲击。其包含的数据量大,涉及的人员面广,而且需要及时更新,故较为复杂,难以单纯地依*人工管理,而且传统的人工管理方式既不易于规范化,管理效率也不高,目前我国各类高等院校中还有相当一部分学生档案管理还停留在纸介质的基础上,尤其是中、小学对学生档案的管理更是落后,这样的管理机制已经不能适应时代发展的要求,其管理方法将浪费许多人力和物力。随着科学技术的不断提高,计算机科学与技术日渐成熟,计算机应用的普及已进入人类社会生活的各个领域,并发挥着越来越重要的作用。这种传统的手工管理模式必然被以计算机为物质基础的信息管理方法所取代。   作为计算机应用的一部分,使用计算机对学生档案进行管理,有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是学校向科学化、正规化管理发展的必要条件,更是各个高等院校与世界接轨的重要条件。
编辑本段开发意义
  系统针对学校学生信息的特点以及管理中实际需要而设计,能够有效地实现学生信息管理的信息化,减轻管理人员的工作负担,高效率、规范化地管理大量的学生信息,并避免人为操作的错误和不规范行为。   学生信息管理系统的典型案例
编辑本段典型案例
  有:“海运学生信息管理系统”,“数字化校园学工信息系统”,“教学管理平台”,“高校学工信息管理系统”

回答2:

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

//#define NULL 0 

int const Q=20; 

#define LEN sizeof(struct student) 

using namespace std; 

int n=0; //定义一个全局变量统计学生人数 

//——--------->定义一个学生考试信息的结构体 

struct student 

 char name[Q]; //用来存放姓名的 

 char sex[Q]; //用来存放性别的 

 long int id; //用来存放准考证号的 

 int score[4]; //用来存放分数的 

 int total; //用来存放总分数的 

 struct student *next; 

}; 

//student向量容器 

vector  stu; 

//-------------->学生类 

class Information 

public: 

Information() ; //构造函数. 

~Information() ; //析构函数. 

student *creat();//建立链表函数。 

 void output(student *head); 

 int count(student *head);//定义函数count()统计考生总数 

 student *insert(student*head);//指针函数*insert()用来添加考生信息. 

 student *cancel(student *head,long int num);//指针函数*cancel()用来删除考生信息. 

 student *find(student *head,long int num); //指针函数*find()用来查找考生信息. 

 void inorder(student *head);//定义inorder()函数将考生的总分从大到小排列并输出 

 void average( student *head);//求学生成绩的平均分的函数 

 void save(student *head);//保存函数 

 student *Read();//读取函数 

private: 

student *p1,*p2,*p3,*head,st; 

}; 

 Information::Information() 

 { 

 cout<<" ******************************************************************************\n"; 

 cout<<" ------------------------<<欢迎您使用学生成绩管理系统>>------------------------\n";  

 cout<<" ******************************************************************************\n\n";  

 } 

 Information::~Information() 

 { 

 cout<<" ******************************************************************************\n"; 

 cout<<" ------------------------<<谢谢您使用学生成绩管理系统>>------------------------\n";  

 cout<<" ******************************************************************************\n"; 

 } 

student *Information::creat(void) 

{//定义一个指向struct student的结构体指针函数*creat()用来增加考生信息. 

 char ch[Q];n=0; //用来存放姓名的 

 p1=p2=(student *)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元 

 cout<<" -------------<<请建立学生考试信息表,在姓名处键以 ! 结束输入。>>--------------"<

 cout<<" 姓名:"; 

 cin>>ch; 

 head=NULL; //给指针head赋初值 

while (strcmp(ch,"!")!=0) 

{//调用字符比较函数strcmp()用来判断是否继续输入 

 char str[10]; 

 int flag=0; 

 p1=(student *)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元 

 strcpy(p1->name,ch); //将循环结构前面输入的姓名复制到结构体名为p1的数组name中 

 cout<<" 性别:"; 

 cin>>p1->sex; 

  

 cout<<" 准考证号(8位):"; 

 do{ 

 cin>>str; 

 if(atol(str)>99999999 || atol(str)<1) 

 cout<<"对不起,请正确输入!!!\n"; 

 else 

 { 

p1->id=atol(str); flag=1;  

 }while(flag==0); 

  

 flag=0; 

  

 cout<<" 计算机组成原理成绩:"; 

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { 

p1->score[0]=atoi(str); flag=1; 

 }while(flag==0); 

  

 flag=0; 

  

 cout<<" 概率统计成绩:"; 

do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[1]=atoi(str); flag=1;} 

 }while(flag==0); 

  

 flag=0; 

  

 cout<<" 英语成绩:"; 

  

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[2]=atoi(str); flag=1;} 

 }while(flag==0); 

 flag=0; 

  

 cout<<" C++成绩:"; 

  

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[3]=atoi(str); flag=1;} 

 }while(flag==0); 

  

 flag=0; 

  

 p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];//计算总分 

 if(n==0)head=p1;//如果是输入第一组学生考试信息就将指针p1赋给指针head 

 else p2->next=p1;//否则将p1赋给p2所指结构体的next指针 

 p2=p1;//将指针p1赋给指针p2 

 n++; //将n的值加1 

 cout<<" 姓名:"; 

 cin>>ch;//将输入的姓名存放到字符数组ch中 

p2->next=NULL;//将p2所指结构体的next指针重新赋空值 

return (head);//将输入的第一组学生考试信息返回 

//--------------->定义output()函数将考生的信息从头指针所指内容开始输出 

void Information::output(student *head) 

 if(head==NULL) cout<<" 这是一个空表,请先输入考生成绩.\n"; 

 else{ 

cout<<"-------------------------------------------------------------------------------\n"; 

 cout<<" *学生考试成绩信息表*\n"; 

 cout<<"-------------------------------------------------------------------------------\n";  

 cout<<"准考证号   姓 名      性别    计算机组成原理   概率统计   英语   C++  平均分  总分\n"; 

 cout<<"-------------------------------------------------------------------------------\n";  

 p1=head;//将头指针赋给p 

 do 

 cout<id 

 <name 

 <sex 

 <score[0] 

 <score[1] 

 <score[2] 

 <score[3] 

 <total/4.0 

 <total<

 cout<<"-------------------------------------------------------------------------------\n";  

 p1=p1->next;//将下一组考生信息的next指针赋给p 

}while(p1!=NULL);//若指针p非空则继续,目的是把所有的考生信息都传给指针p然后输出. 

//------------>统计学生人数的函数 

int Information::count(struct student *head)//定义函数count()统计考生总数 

if(head==NULL) 

 return(0);//若指针head为空返回值为0 

 else return(1+count(head->next));//函数的递归调用 

//----------->插入学生的成绩的函数 

student *Information::insert( student *head) 

//插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加考生信息. 

 char str[10]; 

 int flag=0; 

 cout<<"\t----------------<<请输入新增学生成绩信息>>----------------\n"<

 p1=(student *)malloc(LEN); //使p1指向插入的新结点 

 cout<<" 姓名:"; 

 cin>>p1->name; //将输入的姓名存放到结构体名为p1的数组name中 

 cout<<" 性别:"; 

 cin>>p1->sex; 

 cout<<" 准考证号(8位):"; 

 do{ 

 cin>>str; 

 if(atol(str)>99999999 || atol(str)<1) 

 cout<<"对不起,请请正确输入!!!\n"; 

 else 

 {p1->id=atol(str); flag=1; } 

 }while(flag==0); 

 flag=0; 

 cout<<" 计算机组成原理成绩:"; 

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[0]=atoi(str); flag=1;} 

 }while(flag==0); 

 flag=0; 

 cout<<" 概率统计成绩:"; 

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[1]=atoi(str); flag=1;} 

 }while(flag==0); 

 flag=0; 

 cout<<" 英语成绩:"; 

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[2]=atoi(str); flag=1;} 

 }while(flag==0); 

 flag=0; 

 cout<<" C++成绩:"; 

 do{ 

 cin>>str; 

 if(atoi(str)>100 || atoi(str)<1) 

 cout<<"对不起,请输入1-100之间的数字!!\n"; 

 else 

 { p1->score[3]=atoi(str); flag=1;} 

 }while(flag==0); 

 flag=0; 

 p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];//计算总分 

 p2=head;//将头指针赋给p2 

 if(head==NULL) //若没调用次函数以前的头指针head为空 

 head=p1;p1->next=NULL; 

}//则将p1赋给头指针head并将p1所指结构体成员指针next赋空值 

 else 

 while((p1->id>p2->id)&&(p2->next!=NULL)) 

 { 

 p3=p2;//p3指向原p2指向的结点 

 p2=p2->next; 

 }//p2后移一个结点 

 if(p1->id<=p2->id) 

 { 

 if(head==p2) 

 { 

 p1->next=head; 

 head=p1; 

 } //插入到第一个结点之前 

 else 

 { 

 p3->next=p1; 

 p1->next=p2; 

 } //插入到p3所指结点之后 

 } 

 else 

 { 

 p2->next=p1; 

 p1->next=NULL; 

 } //插入到尾结点之后 

n++;//将学生人数加1 

 cout<<"\t你输入的学生信息已经成功插入"<

return (head); 

//------------>删除函数 

student *Information::cancel(student *head,long int num)//定义一个指向struct student的结构体指针函数*delete()用来删除考生信息. 

 if(head==NULL)//若调用次函数以前的头指针head为空 

 return(head); 

 } 

else 

 p1=head;//否则将头指针赋给p1 

 while(num!=p1->id&&p1->next!=NULL)//寻找要删除的结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空 

 { 

 p2=p1; 

 p1=p1->next; 

 }//p2指向原p1指向的结点p1后移一个结点 

 if(num==p1->id)//如果输入的学生准考证号是p1所指的学生准考证号//结点找到后删除 

 { 

 if(p1==head) head=p1->next;//如果head指针和p1指针相等则将下一个结点赋给指针head 

 else 

 p2->next=p1->next;//否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去 

 cout<<" 删除准考证号为"<

 n--;//将学生人数减1 

 } 

 return(head);//将头指针返回 

//------------>查找函数 

student *Information::find(student *head,long int num) 

//定义一个指向struct student的结构体指针函数*find()用来查找考生信息. 

if(head==NULL)//若调用次函数以前的头指针head为空 

 cout<<" 这是一个空表,请先输入考生成绩.\n"; 

 return(head); 

else 

 p1=head;//否则将头指针赋给p1 

 while(num!=p1->id&&p1->next!=NULL) 

//寻找结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空 

 { 

 p1=p1->next; 

 }//p2指向原p1指向的结点p1后移一个结点 

 if(num==p1->id)//如果要查找的学生准考证号是p1所指的学生准考证号 

 { 

 cout<<"------------------------------------------------------------------------------\n"; 

 cout<<"准考证号 姓名 性别 计算机组成原理 概率统计 英语 C++ 平均分 总分 \n"; 

 cout<<"------------------------------------------------------------------------------\n"; 

 cout<id 

 <name 

 <sex 

 <score[0] 

 <score[1] 

 <score[2] 

 <score[3] 

 <total/4.0 

 <total<

 cout<<"------------------------------------------------------------------------------\n"; 

 } 

 else 

 cout<<" 没找到准考证号为"<

 return(head); 

//------------定义inorder()函数将考生的总分从大到小排列并输出 

void Information::inorder(student *head) 

int i,k,m=0,j; 

 student *p[Q];//定义一个指向struct student的结构体指针数组p 

 if(head!=NULL)//如果头指针是空则继续 

{ m=count(head); 

 cout<<"------------------------------------------------------------------------------\n"; 

 cout<<"学生考试成绩统计表\n"; 

 cout<<"------------------------------------------------------------------------------\n"; 

 cout<<"准考证号 姓 名 性别 计算机组成原理 概率统计 英语 C++ 平均分 总分 名次\n"; 

 cout<<"------------------------------------------------------------------------------\n"; 

 p1=head; 

 for(k=0;k

 { 

 p[k]=p1; 

 p1=p1->next; 

 } 

 for(k=0;k

 for(j=k+1;j

 if(p[k]->totaltotal) 

 { 

 p2=p[k]; 

 p[k]=p[j]; 

 p[j]=p2; 

 } //从大到小排列的指针 

 for(i=0;i

 { 

 cout<id 

 <name 

 <sex 

 <score[0] 

 <score[1] 

 <score[2] 

 <score[3] 

 <total/4.0 

 <total<

 cout<<"------------------------------------------------------------------------------\n";  

 } 

//------------>求各科平均分成绩的函数 

 

 void Information::average(student *head) 

 int k,m; 

 float arg1=0,arg2=0,arg3=0,arg4=0; 

 if(head==NULL)//如果头指针是空则继续 

 cout<<" 这是一个空表,请先输入考生成绩.\n"; 

else 

 m=count(head); 

 p1=head; 

 for(k=0;k

 { 

 arg1+=p1->score[0]; 

 arg2+=p1->score[1]; 

 arg3+=p1->score[2]; 

 arg4+=p1->score[3]; 

 p1=p1->next; 

 } 

 arg1/=m;arg2/=m;arg3/=m;arg4/=m; 

 cout<<"全班单科成绩平均分\n"; 

 cout<<"------------------------------------------------------------------------------\n"; 

 cout<<" 计算机组成原理平均分:"<

 <<" 概率统计平均分:"<

 <<" 英语平均分:"<

 <<" C++平均分:"<

 cout<<"------------------------------------------------------------------------------\n"; 

//------------------->保存函数. 

void Information::save(student *head) 

ofstream out("data.txt",ios::out); 

out<

 while(head!=NULL) 

 { out<name<<"\t" 

 <id<<"\t"<<"\t" 

 <sex<<"\t" 

 <score[0]<<"\t" 

 <score[1]<<"\t" 

 <score[2]<<"\t" 

 <score[3]<<"\t" 

 <total<

 head=head->next; 

 } 

//———————————>读取函数的实现 

student *Information::Read() 

{ int i=0; 

 p1=p2=( student *)malloc(LEN); 

head=NULL; 

ifstream in("data.txt",ios::out); 

in>>i; 

if(i==0){cout<<" data.txt 文件中的数据为空,请先输入数据。"<

else { 

 cout<<" …………………………………………………………………………………………"<

 for(;i>0;i--) 

{ p1=(student *)malloc(LEN); 

 cin>>st.name>>st.id>>st.sex 

 >>st.score[0]>>st.score[1]>>st.score[2]>>st.score[3] 

 >>st.total; 

 strcpy(p1->name,st.name); 

 p1->id=st.id; 

 strcpy(p1->sex,st.sex); 

 p1->score[0]=st.score[0]; 

 p1->score[1]=st.score[1]; 

 p1->score[2]=st.score[2]; 

 p1->score[3]=st.score[3]; 

 p1->total=st.total; 

 if(n==0)head=p1;//如果是输入第一组学生考试信息就将指针p1赋给指针head 

 else p2->next=p1;//否则将p1赋给p2所指结构体的next指针 

 p2=p1;//将指针p1赋给指针p2 

 n++; //将n的值加1 

 //显示读入数据 

 cout<<" "<name<<"\t" 

 <id<<"\t"<<"\t" 

 <sex<<"\t" 

 <score[0]<<"\t" 

 <score[1]<<"\t" 

 <score[2]<<"\t" 

 <score[3]<<"\t" 

 <total<

 cout<<" …………………………………………………………………………………………"<

 // 

cout<<" 数据已经成功读取完毕。"<

 p2->next=NULL; 

 return (head); 

//------------------------------>主函数. 

int main(void) 

 Information person; 

 student *head=NULL; 

 char str[10]; 

 int flag=0; 

 int choice; 

 long int i; 

 head=person.Read(); 

 do{ 

 cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<

 cout<<"┃ 学生成绩管理系统主菜单界面 ┃"<

 cout<<"┃ 读取数据请输入数字零 ┃"<

 cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫"<

 cout<<"┃ ①.输入学生成绩 ┃"<

 cout<<"┃ ②.显示学生成绩 ┃"<

 cout<<"┃ ③.排序统计成绩 ┃"<

 cout<<"┃ ④.查找学生成绩 ┃"<

 cout<<"┃ ⑤.增加学生成绩 ┃"<

 cout<<"┃ ⑥.删除学生成绩 ┃"<

 cout<<"┃ ⑦.保存退出系统 ┃"<

 cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<

 cout<<"请输入您的选择(1--7):( )\b\b"; 

 cin>>str; 

 if(atoi(str)>7 || atoi(str)<1) 

 cout<<"对不起,请输入1-7这几个数字!!\n"; 

 else 

 { 

 choice=atoi(str); 

 switch(choice) 

 { 

 case 1: 

 head=person.creat(); 

 break; 

 case 2: 

 person.output(head); 

 break; 

 case 3: 

 person.inorder(head); 

 person.average(head); 

 cout<<" 参加考试的学生人数为:"<

 break; 

 case 4: 

 cout<<" 请输入要查找的准考证号(8位):"; 

 do{ 

 cin>>str; 

 if(atol(str)>99999999 || atol(str)<1) 

 cout<<"对不起,请输入正确输入!!!\n"; 

 else 

 {i=atol(str); flag=1; } 

 }while(flag==0); 

 flag=0; 

 person.find(head,i); 

 break; 

 case 5: 

 head=person.insert(head); 

 person.output(head); 

 break; 

 case 6: 

 cout<<" 请输入要删除的准考证号(8位):"; 

 do{ 

 cin>>str; 

 if(atol(str)>99999999 || atol(str)<1) 

 cout<<"对不起,请输入正确输入!!!h\n"; 

 else 

 {i=atol(str); flag=1; } 

 }while(flag==0); 

 flag=0; 

 head=person.cancel(head,i); 

 person.output(head); 

 break; 

 case 7: 

 person.save(head); 

cout<<"文件已保存!可以安全退出!!!"<

 break; 

 default :cout<<" 对不起,您的输入有误,请重新输入。\n"; 

 break; 

 } 

 } 

 }while(choice!=7); 

 return 0; 

}

回答3:

去百度一下 破解的数据库到处都有 改个名称就行了

回答4:

http://wenku.baidu.com/view/9e61e54669eae009581bec6a.html

vc学生信息管理系统 使用VC++编写的学生信息管理系统,非常有用。

回答5:

去chinaz下一个 多得很