文档章节

学生信息管理系统

文刀人韦
 文刀人韦
发布于 2017/07/14 10:16
字数 1655
阅读 19
收藏 0

转载在,,,忘了

#include <iostream>  
#include <fstream>  
#include <string.h>  
#include <conio.h>//用getch();  
using namespace std;  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
class Student  
{  
public:  
 char name[20];  
 char Id[20];  
 int Cnum;       //C++课程得分  
 int Mnum;       //汇编课程得分  
 int Enum;       //嵌入式操作系统课程得分  
 int sum;        //总分       
 Student * Next;  
 void Input()  
 {  
  cout<<"\t\t请输入学生的姓名:"; cin.get(); cin.getline(name,20);  //cin>>name不能输入liu huo,也就是中间不能有空格
  cout<<"\t\t请输入学生的学号:";  cin>>Id;  
  cout<<"\t\t请输入C++课程的成绩:";  cin>>Cnum;  
  cout<<"\t\t请输入汇编课程的成绩:";  cin>>Mnum;  
  cout<<"\t\t请输入嵌入式操作系统课程的成绩:";  cin>>Enum;  
  sum=Cnum+Mnum+Enum;  
 }  
 void ReadFile(istream & in) //只能读取一行,修改!! 
 {  
  in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;  
 }  
 void Show()  
 {  
  cout<<"姓名:"<<name<<endl<<"学号:"<<Id<<endl<<"C++:"<<Cnum<<endl  
   <<"汇编:"<<Mnum<<endl<<"嵌入式操作系统:"<<Enum<<endl<<"总成绩:"<<sum<<endl<<endl<<endl;  
 }  
};  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
class Studentmassage  
{  
public:  
 Studentmassage();  
 ~Studentmassage();  
 void ShowMenu();  
 void Find();  
 void Save();  
 void ModifyItem();  //修改
 void RemoveItem();  //删除
 void Swap(Student *,Student *);   //交换
 void Sort();   //排序
 //void Unpass();  
 int ListCount();  
 //void Average();  
 void Display()  //显示所有人的信息
 {  
  for(Student * p=Head->Next;p!=End;p=p->Next)  
   p->Show();  
  cout<<"输入任意字符!继续……";  
  getch();   //用getch();会等待你按下任意键,再继续执行下面的语句
 }  
 void AddItem()  //添加函数,从尾部添加.第一次添加完成后,还未保存到txt中
 {  
  End->Input();  //end指针指向输入的地方
  End->Next=new Student;  //next指向new
  End=End->Next;  //end指向了new,下一次调用添加函数,就会直接添加到end所指向的new
  cout<<"添加成功!"<<endl;  
  cout<<"输入任意字符!继续……";  
  getch();  
 }  
private:  
 Student * Head,* End;  
 ifstream in;  
 ofstream out;  
 Student *FindItem(char * name)  
 {  
  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空  
   if(!strcmp(p->Next->name,name))return p;  //strcmp(str1,str2),比较两个字符串,相同返回0;str1<str2,则返回负数;str1>str2,则返回正数。
   return NULL;  
 }  
 Student *FindID(char * Id)  
 {  
  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空  
   if(!strcmp(p->Next->Id,Id))return p;  
   return NULL;  
 }  
};  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
Studentmassage::Studentmassage()  
{  
 Head=new Student;  //head和end都指向新开辟的new
 Head->Next=new Student;  
 End=Head->Next;  
 in.open("sort.txt");  //在本目录打开txt
 //!cin,判断上一次的输入是否失败;!(cin >> xxx)判断当前输入是否失败
 if(!in)  //判断打开文件是否失败,执行底下的为打开失败。如果第一次运行程序,且未创建txt,就打开失败,且不会自动创建txt
  cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;  
 else  
 {  
  while(!in.eof())  //检测是否是读取到了输入文件的最后一个数据
  {  
   End->ReadFile(in);  
   if(End->name[0]=='\0')break;  
   End->Next=new Student;  
   End=End->Next;  
  }  
  in.close();  
  cout<<"\t\t读取学生信息成功!"<<endl;  //存在文件并打开成功
 }  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
Studentmassage::~Studentmassage()  
{  
 Save();  
 for(Student * temp;Head->Next!=End;)  
 {  
  temp=Head->Next;  
  Head->Next=Head->Next->Next;  //除head和end所指向的,其他都被删除
  delete temp;  
 }  
 delete Head,End;  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::ShowMenu()                    
{  
  cout<<"********************************************************************************"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓〓  ☆   学 生 成 绩 管 理 系  统     ☆  〓〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓★★★★★         ★★★★★★★         ★★★★★〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          1.增加学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          2.显示学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          3.排序统计成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          4.查找学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          5.删除学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          6.修改学生信息        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          0.安全退出系统        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;  
   
 cout<<"\n\t\t\n\t\t请选择:";  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::Find()  
{  
 char name[20] ,Id[10];  
 int x;  
 Student * p=NULL;  
 cout<<"\n\t\t*********************************\n";  
 cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";  
 cout<<"\n\t\t*********************************\n请选择:";  
 cin>>x;  
 switch(x)  
 {  
 case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;  
  if(p=FindItem(name))  
  {  
   p->Next->Show();  
   cout<<"输入任意字符!继续……";  
   getch();  
  }  
  else  
  {  
   cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;  
   cout<<"输入任意字符!继续……";  
   getch();  
  }  
     }break;  
 case 2:  
  {  
   cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;  
   if(p=FindID(Id))  
   {  
    p->Next->Show();  
    cout<<"输入任意字符!继续……";  
    getch();  
   }  
   else  
   {  
    cout<<"\t\t没有找到该学好的学生!"<<'\n'<<endl;  
    cout<<"输入任意字符!继续……";  
    getch();  
   }  
  }break;  
 }  
   
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::ModifyItem()     //修改信息  
{  
 char name[20];  
 Student * p=NULL;  
 cout<<"\t\t请输入要修改的人的姓名:";cin>>name;  
 if(p=FindItem(name))  
 {  
  cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;  
  p->Next->Input();  
  cout<<"修改成功!"<<endl;  
  cout<<"输入任意字符!继续……";  
  getch();  
 }  
 else  
 {  
  cout<<"\t\t没有找到!"<<endl;  
  cout<<"输入任意字符!继续……";  
  getch();  
 }  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::RemoveItem()         // 删除信息  
{  
 char name[20];  
 Student * p=NULL,*temp=NULL;  
 cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;  
 if(p=FindItem(name))  
 {  
  temp=p->Next;  
  p->Next=p->Next->Next;   
  delete temp;  
  cout<<"\t\t删除成功!"<<endl;  
  cout<<"输入任意字符!继续……";  
  getch();  
 }  
 else  
 {  
  cout<<"\t\t没有找到!"<<endl;  
     cout<<"输入任意字符!继续……";  
  getch();  
 }  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::Swap(Student *p1, Student *p2)//交换两个combox变量的数据域  
{  //temp->new;temp<-p1;p1<-p2;p2<-temp。完成交换p1和p2所指向的数据
 Student *temp=new Student;   
 strcpy(temp->name,p1->name);  
 strcpy(temp->Id,p1->Id);  
 temp->Cnum=p1->Cnum;  
 temp->Mnum=p1->Mnum;  
 temp->Enum=p1->Enum;  
 temp->sum=p1->sum;  
   
 strcpy(p1->name,p2->name);  
 strcpy(p1->Id,p2->Id);  
 p1->Cnum=p2->Cnum;  
 p1->Mnum=p2->Mnum;  
 p1->Enum=p2->Enum;  
 p1->sum=p2->sum;  
   
 strcpy(p2->name,temp->name);  
 strcpy(p2->Id,temp->Id);  
 p2->Cnum=temp->Cnum;  
 p2->Mnum=temp->Mnum;  
 p2->Enum=temp->Enum;  
 p2->sum=temp->sum;  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数  
{  
 if(! Head)  
  return 0;  
 int n=0;  
 for(Student * p=Head->Next;p!=End;p=p->Next)  
 {  
  n++;  
 }  
 return n;  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::Sort()//对当前链表进行排序,按总分排序  
{   
 cout <<"Sorting..."<<endl;  
 Student *p=NULL,*p1=NULL,*k=NULL;  
 int n=Studentmassage::ListCount();  
 if(n<2)   
  return;  
 for(p=Head->Next;p!=End;p=p->Next)  
  for(k=p->Next;k!=End;k=k->Next)  
  {  
   if(p->sum>k->sum)  //大的放在后面
   {  
    Studentmassage::Swap(p,k);  
   }  
  }  
 cout <<"排序完成!"<<endl;  
 getch();  
 return;  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
void Studentmassage::Save()  
{  
 out.open("sort.txt");  
 for(Student *p=Head->Next;p!=End;p=p->Next)  
  out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"\t"  
  <<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->sum<<'\n';  
 out.close();  
}  
  
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌  
int main()  
{  
 int x,i=0;  
 bool quit=false;  
 cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl;  
 for(i=0;i<3;i++)  
  cout<<"\t\t◎\t\t\t\t\t\t  ◎"<<endl;  
 cout<<"\t\t◎★★★★【  欢迎进入学生成绩管理系统  】★★★★◎"<<endl;  
 for(i=0;i<3;i++)  
  cout<<"\t\t◎\t\t\t\t\t\t  ◎"<<endl;  
 cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl;;  
 Studentmassage Grade;  
 cout<<"按任意键开始……";  
  getch();  
 while(!quit)  
 {  
  system("cls");  //清屏,#include <windows.h>;每次程序运行的时候都会将上一次运行输出的内容给清除掉,屏幕上就只显示本次输出的结果!
  Grade.ShowMenu();  
  cin>>x;  
  switch(x)  
  {  
  case 0:quit=true;break;  
  case 1:Grade.AddItem();break;  
  case 2:Grade.Display();break;  
  case 3:Grade.Sort();break;  
  case 4:Grade.Find();break;  
  case 5:Grade.RemoveItem();break;  
  case 6:Grade.ModifyItem();break;  
  }  
 }  
 return 0;  
}

© 著作权归作者所有

共有 人打赏支持
上一篇: 单链表
下一篇: tank
文刀人韦
粉丝 0
博文 35
码字总数 79740
作品 0
渭南
私信 提问

暂无文章

80后阿里P10,“关老板”如何带着MaxCompute一路升级?

我是个幸运的人。虽然幸运不能被复制,但是眼光和努力可以。 关涛/关老板,80后的阿里P10,阿里巴巴通用计算平台负责人,阿里巴巴计算平台研究员。12年职场人生,微软和阿里的选择。 关涛的花...

阿里云官方博客
25分钟前
1
0
开源软件和开源模式面临的生存危机

开源模式可能正面临一场危机。越来越多的开源软件和平台被大型云计算服务商融入自家的云服务体系,并以此获利颇丰,但并不支付费用,也没有对开源社区做出相应的回馈。而实际上,大部分开源软...

Linux就该这么学
26分钟前
1
0
统一服务消息返回错误:{"errcode":40165,"errmsg":"invalid weapp pagepath hint: [bsAWua0201ge30]"}

{"errcode":40165,"errmsg":"invalid weapp pagepath hint: [bsAWua0201ge30]"} 原因:pagepath参数为所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar), 以前配置的是:m...

tianma3798
28分钟前
1
0
ElasticSearch实战:Linux日志对接Kibana

本文由云+社区发表 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口。ElasticSearch是用Java开发的,并作为Apache许可条款下...

腾讯云加社区
30分钟前
1
0
FeignClient超时配置

1前沿 使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间 1.1ribbon配置 ribbon: OkToRetryOnAllOperations: f...

lovelan1314
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部