顺序表——学生成绩管理

       1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

# include <iostream>
# include <fstream>
# include <string.h>
#define MAX 100
int i,n;
using namespace std;

struct Student{      //声明一个结构体类型Student 
 char id[20];         
 char name[20]; 
 int Lnum;       //离散课程得分
 int Gnum;       //管理学课程得分
 int Enum;       //英语课程得分
 float sum;        //总分  
 void Menu();
 void Find();
 void RemoveItem();
 void Display(); 
 void show();
 void AddItem();
 void Input();
 
}Stu[MAX+1];
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Menu(){
  
  cout<<"																"<<endl;
  cout<<"\t    学 生 成 绩 管 理 系  统\t\t"<<endl;
  cout<<"																"<<endl;
  cout<<"\t\t1.录入\t\t"<<endl;
  cout<<"\t\t2.显示\t\t"<<endl;
  cout<<"\t\t3.查找\t\t"<<endl;
  cout<<"\t\t4.插入\t\t"<<endl;
  cout<<"\t\t5.删除\t\t"<<endl;
  cout<<"\t\t0.退出\t\t	"<<endl;
 
 
 cout<<"\n\t\t\n\t\t请选择:"<<endl;

}




//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌录入信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Input()
{  

cout<<"\t\t你要录入几位学生:";
cin>>n;
for(i=1;i<=n;i++)
{
  cout<<"第"<<i<<"位";
  cout<<"\t\t请输入学生姓名:"<<endl;  cin>> Stu[i].name;
  cout<<"\t\t请输入学生学号:"<<endl;  cin>>Stu[i].id;
  cout<<"\t\t请输入离散成绩:"<<endl;  cin>>Stu[i].Lnum;
  cout<<"\t\t请输入管理成绩:"<<endl;  cin>>Stu[i].Gnum;
  cout<<"\t\t请输入英语成绩:"<<endl;  cin>>Stu[i].Enum;
  Stu[i].sum=Stu[i].Lnum+Stu[i].Gnum+Stu[i].Enum;
}
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌显示所有信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Display()
{
cout<<"序号"<<"\t"<<"姓名"<<"\t\t"<<"学号"<<"\t"<<"离散"<<"\t"<<"管理"<<"\t"<<"英语"<<"\t"<<"总分"<<endl;
for(i=1;i<=n;i++)
{

cout<<i<<"\t"<<Stu[i].name<<"\t"<<Stu[i].id<<"\t"<<Stu[i].Lnum<<"\t"<<Stu[i].Gnum<<"\t"<<Stu[i].Enum<<"\t"<<Stu[i].sum<<"\t"<<"\n";

}
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌选择信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

void Student::show()
{
cout<<"序号"<<"\t"<<"姓名"<<"\t\t"<<"学号"<<"\t"<<"离散"<<"\t"<<"管理"<<"\t"<<"英语"<<"\t"<<"总分"<<endl;
cout<<i<<"\t"<<Stu[i].name<<"\t"<<Stu[i].id<<"\t"<<Stu[i].Lnum<<"\t"<<Stu[i].Gnum<<"\t"<<Stu[i].Enum<<"\t"<<Stu[i].sum<<"\t"<<"\n";
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Find()
{
 char na[20] ,I[10];
 int x,a,z;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t \t    1.按姓名 2.按学号3.按序号";
 cout<<"\n\t\t*********************************\n请选择:";
 cin>>x;
   switch(x)
   {
      case 1:{
		  cout<<"\t\t请输入要查找的姓名:";cin>>na;
          bool flag=false;
         for(i=1;i<=n;i++)
		 {
			if(strcmp(Stu[i].name, na) == 0) 
			{
			 Stu[i].show();
			 flag=true;
			}	
		
		  }
		 if(!flag){
		 cout<<"无此人";
		 
		 }
	
		 
			}break;

	
	 case 2:{
          cout<<"\t\t请输入要查找的学号:";cin>>I;
		   bool flag=false;
          for(i=1;i<=n;i++)
		 {
			if(strcmp(Stu[i].id, I) == 0) 
			{ 
	    	 Stu[i].show();
			flag=true;}
			
		 }
		  if(!flag){
			  cout<<"无此人";}
			}break;
	 case 3:{
          cout<<"\t\t请输入要查找的序号:";cin>>i;
		  if(i<1||i>n) throw "position error";
	      else  Stu[i].show();
			}break;

   }
 
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌插入信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

 void AddItem()
 {
int i,j;
n++;
if(n>MAX) throw "overflow";
cout<<"which position do you want to insert?";
cin>>i;
if(i<1||i>n) throw "position";
for(j=n;j>=i;j--)
{
Stu[j]=Stu[j-1];
}
  cout<<"第"<<i<<"位";
  cout<<"\t\t请输入学生姓名:"<<endl;  cin>> Stu[i].name;
  cout<<"\t\t请输入学生学号:"<<endl;  cin>>Stu[i].id;
  cout<<"\t\t请输入离散成绩:"<<endl;  cin>>Stu[i].Lnum;
  cout<<"\t\t请输入管理成绩:"<<endl;  cin>>Stu[i].Gnum;
  cout<<"\t\t请输入英语成绩:"<<endl;  cin>>Stu[i].Enum;
  Stu[i].sum=Stu[i].Lnum+Stu[i].Gnum+Stu[i].Enum;
 cout<<"The new list is:";
  Display();
 }
 //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

 void RemoveItem()
 {
 int j;
 if(n==0) throw "underflow";
cout<<"which sequence number do you want to delete?";
cin>>i;
if(i<1||i>n) throw "position";
for(j=i+1;j<=n;j++)
{
Stu[j-1]=Stu[j];

}
cout<<"The new list is: ";
n--;
 Display();
 }

int  main()
{
int x,i=0;
 bool quit=false;
 while(!quit)
 {
  system("cls");
  Menu();  
  cin>>x;
  switch(x)
  {
  case 0:quit=true;break;
  case 1:Input();system("pause");break;
  case 2:Display();system("pause");break;
  case 3:Find();system("pause");break;
  case 4:AddItem();system("pause");break;
  case 5:RemoveItem();system("pause");break;
  }
 }
 return 0;
}

实验结果如图所示

菜单界面




自定义要录入多少个学生




录完之后的显示界面



查询功能。包括按姓名,按学号和按序号

若查无此人则返回“无此人”




插入功能。如现在我在第二位插入“陈某某”,出现的新表如图




删除功能。如将陈某某删除后,新的表如图所示。


  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++课程设计-单链表——学生信息管理系统全文共9页,当前为第1页。C++课程设计 单链表——学生信息管理系统 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第1页。 学生信息管理系统设计文档 设计任务描述 为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了"学生信息管理系统"软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。该软件可以更加方便管理者管理学生学籍信息。 功能需求说明 该系统所需要的功能有:1、链表的建立; 2、学生信息的插入; 3、学生信息的查询; 4、学生信息的输出; 5、学生信息的修改; 6、学生信息的删除; 7、良好的欢迎选择界面。 三、总体方案设计 一、实现任务的方法 1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令; 2、在从学生信息的建立直到删除,都是使用链表的相关知识; 3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义了一个achieve 结构体; 总体结构 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第2页。 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第2页。 三、模块划分 (1)链表的建立。 (2)对链表信息的插入。 (3)对链表信息的查找。 (4)对链表信息的输出。 (5)对链表信息的删除。 (6)对链表信息的修改。 课程成绩信息作为附加信息,穿插于各个模块中。 数据结构说明 一、自定义的数据结构: 1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。 2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第3页。3、结点结构-Nodetype,定义了数据域inform和指针域next; C++课程设计-单链表——学生信息管理系统全文共9页,当前为第3页。 二、类 Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。 各模块设计说明 一、建立: 首先:建立一个空链表: Student::Student() {head=new Nodetype; head->next=NULL; 表明这是一个空链表 cout<<"请建立链表\n"; } C++课程设计-单链表——学生信息管理系统全文共9页,当前为第4页。然后建立链表: C++课程设计-单链表——学生信息管理系统全文共9页,当前为第4页。 二、添加:按照学号从小到大的顺序插入: 三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。 四、查找:利用学号和姓名两种方式进行查找,查找时主要是遍历链表进行判断 while(p!=NULL&&(d==1&&strcmp(input,p->data.num)!=0)""(d==2&&strcmp(input,p->data.name)!=0)) {p=p->next; } //遍历链表查找符合要求的节点 五、删除:利用节点的删除操作,找到链表中第i-1个结点,修改其指向后继的指针: q = p->next; p->next = q->next; delete(q); 六、更改:利用查找的操作,查到后在进行重新输入的操作; 测试情况说明 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第5页。测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第一个数据进行操作,如下图所示: C++课程设计-单链表——学生信息管理系统全文共9页,当前为第5页。 但是当要进行查找、删除、修改操作时,系统只能对第一个对象进行操作 查看程序时,发现查找函数、删除和修改函数都有个逻辑错误 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第6页。全部修改后,程序的上述错误就没再出现了。 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第6页。 错误二:当提示是否输入课程成绩信息时,输入第一门课程名时,会出现无穷循环 但当输入第一门课程后就会出现下图所示状况: 对于这种状况,我百思不得其解,后来请教其他同学,他告诉我错误在于声明课程成绩信息时出错了 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第7页。应该为二维数组,修改之后,课程成绩输入输出便正常了 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第7页。 错误三:输入学生信息时不按照学号大小顺序,输出结果时也不
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值