学生管理系统(线性链表的简单应用)
说实话,这个程序和教务处管理系统没有什么区别!!!!
还是废话不多说!!!请看程序!!!
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LEN sizeof(struct student)
struct student
{
int num;//学号
char name[20];//姓名
double foxscore;//fox成绩
double cscore;//C语言
double englishscore;//英语成绩
struct student *next;
};
int main()
{
void InputData(struct student *A);//输入数据
void PrintData(struct student *B);//打印数据
struct student *DeleteData(struct student *C);//删除数据
void CorectData(struct student *D);//修改数据
void InsertData(struct student *E);//插入数据
void AverData(struct student *F);//数据统计
struct student *head,*pt;
int ch;
pt=head=(struct student *)malloc(LEN);
printf("欢迎使用本学生管理系统,请输入你要进行的操作:\n");
printf("----------------------------------------------------------------\n");
printf(" 初始数据 请按“1” \n");
printf(" 打印数据 请按“2” \n");
printf(" 删除数据 请按“3” \n");
printf(" 修改数据 请按“4” \n");
printf(" 插入数据 请按“5” \n");
printf(" 数据统计 请按“6” \n");
printf(" 结束操作 请按“7” \n");
printf("----------------------------------------------------------------\n");
while(cin>>ch)
{
if(ch==7)
{
printf("感谢您的使用,系统应用已经自动关闭\n");
break;
}
switch(ch)
{
case 1:InputData(head);break;
case 2:PrintData(head);break;
case 3:head=DeleteData(head);break;
case 4:CorectData(head);break;
case 5:InsertData(head);break;
case 6:AverData(head);break;
default: printf("输入错误,请重新输入数据\n");
}
printf("欢迎使用本学生管理系统,请输入你要进行的操作:\n");
printf("----------------------------------------------------------------\n");
printf(" 初始数据 请按“1” \n");
printf(" 打印数据 请按“2” \n");
printf(" 删除数据 请按“3” \n");
printf(" 修改数据 请按“4” \n");
printf(" 插入数据 请按“5” \n");
printf(" 数据统计 请按“6” \n");
printf(" 结束操作 请按“7” \n");
printf("----------------------------------------------------------------\n");
}
return 0;
}
void InputData(struct student *A)//初始数据
{
int Num;
struct student *p1;
p1=A;
printf("请输入要存储的学生个数:\n");
cin>>Num;
while(Num--)
{
printf("学号 姓名 for成绩 c语言成绩 英语成绩\n");
scanf("%d%s%lf%lf%lf",&p1->num,&p1->name,&p1->foxscore,&p1->cscore,&p1->englishscore);
p1->next=(struct student *)malloc(LEN);
if(Num)
p1=p1->next;
else
p1->next=NULL;
}
}
void PrintData(struct student *B)//打印数据
{
struct student *p;
p=B;
while(p!=NULL)
{
printf("学号 姓名 for成绩 c语言成绩 英语成绩\n");
printf("%d %s %.2lf %.2lf %.2lf\n",p->num,p->name,p->foxscore,p->cscore,p->englishscore);
p=p->next;
}
}
struct student *DeleteData(struct student *C)//删除数据
{
struct student *p,*pre;
p=C;
int Num;
printf("请输入你要进行删除的学生的序号\n");
cin>>Num;
if(C->num==Num)
{
C=C->next;
return C;
}
else
{
pre=p;
while(p!=NULL)
{
if(p->num==Num)
{
pre->next=pre->next->next;
break;
}
pre=p;
p=p->next;
}
}
return C;
}
void CorectData(struct student *D)//修改数据
{
struct student *p;
int Num;
p=D;
printf("请输入你要修改的学生的学号;\n");
cin>>Num;
while(p!=NULL)
{
if(p->num==Num)
{
printf("请输入你要修改的学生的信息\n");
printf("学号 姓名 for成绩 c语言成绩 英语成绩\n");
scanf("%d%s%lf%lf%lf",&p->num,&p->name,&p->foxscore,&p->cscore,&p->englishscore);
}
p=p->next;
}
}
void InsertData(struct student *E)//插入数据
{
struct student *p;
p=E;
while(p->next!=NULL)
p=p->next;
p->next=(struct student *)malloc(LEN);
p->next->next=NULL;
printf("请输入你要插入的学生数据\n");
printf("学号 姓名 for成绩 c语言成绩 英语成绩\n");
scanf("%d%s%lf%lf%lf",&p->next->num,&p->next->name,&p->next->foxscore,&p->next->cscore,&p->next->englishscore);
}
void AverData(struct student *F)//平均成绩
{
struct student *p;
p=F;
double sumfox=0,sumc=0,sumenglish=0;
int count=0;
while(p!=NULL)
{
sumfox+=p->foxscore;
sumc+=p->cscore;
sumenglish+=p->englishscore;
p=p->next;
count++;
}
printf("这些同学的平均成绩如下:\n");
printf("c语言成绩:\n");
printf("%.3lf\n",sumc/count);
printf("fox成绩:\n");
printf("%.3lf\n",sumfox/count);
printf("英语成绩:\n");
printf("%.3lf\n",sumenglish/count);
}