#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
struct student
{
int num;
char name[20];
float score;
struct student *next;
};
void welcome()
{
printf("\t\t\t\t-----------------------------------------------------------------\n");
printf("\t\t\t\t|\t\t\t欢迎使用学生管理系统!\t\t\t|\n");
printf("\t\t\t\t-----------------------------------------------------------------\n");
printf("\t\t\t\t!\t\t\t菜单 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t---- !\n");
printf("\t\t\t\t!\t\t\t1.录入同学信息 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t------------- !\n");
printf("\t\t\t\t!\t\t\t2.增加同学信息 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t------------- !\n");
printf("\t\t\t\t!\t\t\t3.删除同学信息 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t------------- !\n");
printf("\t\t\t\t!\t\t\t4.修改同学信息 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t------------- !\n");
printf("\t\t\t\t!\t\t\t5.查找同学信息 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t------------- !\n");
printf("\t\t\t\t!\t\t\t6.同学成绩排序 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t------------- !\n");
printf("\t\t\t\t!\t\t\t7.退出 \t\t\t!\n");
printf("\t\t\t\t!\t\t\t----- !\n");
printf("\t\t\t\t-----------------------------------------------------------------\n");
}
struct student *input(int n)
{
struct student *head;
struct student *p;
struct student *ptail;
int i;
head=NULL;
i=0;
while(i<n)
{
p=(struct student *)malloc(sizeof(struct student));
printf("请输入第%d个学生信息:\n",i+1);
printf("学号: ");
scanf("%d",&p->num);
printf("姓名: ");
scanf("%s",p->name);
printf("成绩:");
scanf("%f",&p->score);
if(p->score<0)
{
printf("请重新输入该学生成绩:");
scanf("%f",&p->score);
}
if(i==0)
{
head=p;
ptail=p;
i++;
}
else
{
ptail->next=p;
ptail=p;
i++;
}
}
if(head!=NULL)
{
ptail=NULL;
}
return head;
}
void output(struct student *head)
{
struct student *pi;
if(head==NULL)
{
printf("空链表!\n");
}
else
{
pi=head;
printf("\t\t\t\t学号\t\t姓名\t\t成绩\t\t\n");
for(pi=head;pi!=NULL;pi=pi->next)
{
printf("\t\t\t\t%d\t\t",pi->num);
printf("%s\t\t",pi->name);
printf("%.2f\t\t\n",pi->score);
}
}
}
struct student *add(struct student *head)
{
int i,a;
char ch;
i=0;
struct student *p,*ptail;
p=head;
while(p->next!=NULL)
{
p=p->next;
}
printf("你需要增添几个学生信息:");
scanf("%d",&a);
while(a>=0)
{
printf("请输入第%d个增添的学生信息:\n",i+1);
ptail=(struct student *)malloc(sizeof(struct student));
ptail=NULL;
printf("学号: ");
scanf("%d",&ptail->num);
printf("姓名: ");
scanf("%s",ptail->name);
printf("成绩:");
scanf("%f",&ptail->score);
if(p->score<0)
{
printf("请重新输入该学生成绩:");
scanf("%f",&p->score);
}
p->next=ptail;
p=ptail;
i++;
a--;
}
printf("你是否需要继续增添(是输入y否输入n):");
fflush(stdin);
scanf("%c",&ch);
if(ch=='y')
{
add(head);
}
if(ch=='n')
{
printf("增加以后的学生信息如下:\n");
output(head);
welcome();
}
else
printf("输入无效,请重新输入");
return head;
}
void remove(struct student *head)
{
struct student *pi,*ploc0,*ploc;
int flag,nr;
flag=0;
printf("有以下几种方式,请选择");
printf("1.学号");
printf("2.姓名");
printf("你的选择是:");
scanf("%d",&nr);
switch(nr)
{
case 1:
int num;
printf("请输入你要删除的学生的学号:");
scanf("%d",&num);
if(head->num==num)
{
ploc=head;
head=head->next;
free(ploc);
flag=1;
}
else for(pi=head;pi->next!=NULL;pi=pi->next)
{
if(head->num==num)
{
ploc=pi->next;
ploc0=pi;
ploc0->next=ploc->next;
free(ploc);
flag=1;
}
}
if(flag==0)
{
printf("没有此学号的学生,请重新输入\n");
remove(head);
}
printf("删除以后的学生信息为:");
output(head);
break;
case 2:
char name[20];
printf("请输入你要删除的学生的姓名:");
scanf("%s",name);
if(strcmp(head->name,name)==0)
{
ploc=head;
head=head->next;
free(ploc);
}
else for(pi=head;pi->next!=NULL;pi=pi->next)
{
if(strcmp(head->name,name)==0)
{
ploc=pi->next;
ploc0=pi;
ploc0->next=ploc->next;
free(ploc);
flag=1;
}
}
if(flag==0)
{
printf("查无此人");
remove(head);
}
default:
{
printf("输入的数字无效,请重新输入");
remove(head);
}
printf("删除以后的学生信息为:");
output(head);
}
}
void sort(struct student *head)
{
char t[20];
double x;
int n,ns;
struct student *p,*q,*pmax,*pmin;
printf("有以下几种排序方式,请选择");
printf("1.分数");
printf("2.学号");
printf("3.姓名");
printf("你的选择是:");
scanf("%d",&ns);
switch(ns)
{
case 1:
for(p=head;p->next!=NULL;p=p->next)
{
pmax=p;
for(q=p->next;q!=NULL;q=q->next)
{
if(p->score<q->score)
{
pmax=q;
}
}
n=p->score;
p->score=pmax->score;
pmax->score=n;
strcpy(t,p->name);
strcpy(p->name,pmax->name);
strcpy(pmax->name,t);
x=p->num;
p->num=pmax->num;
pmax->num=x;
}
printf("排序以后为:");
printf("\n");
output(head);
break;
case 2:
for(p=head;p->next!=NULL;p=p->next)
{
pmin=p;
for(q=p->next;q!=NULL;q=q->next)
{
if(p->num>q->num)
{
pmin=q;
}
}
x=p->num;
p->num=pmin->num;
pmin->num=x;
n=p->score;
p->score=pmin->score;
pmin->score=n;
strcpy(t,p->name);
strcpy(p->name,pmin->name);
strcpy(pmin->name,t);
}
printf("排序以后为:");
printf("\n");
output(head);
break;
case 3:
for(p=head;p->next!=NULL;p=p->next)
{
pmin=p;
for(q=p->next;q!=NULL;q=q->next)
{
if(strcmp(p->name,q->name)>0)
{
pmin=q;
}
}
n=p->score;
p->score=pmin->score;
pmin->score=n;
strcpy(t,p->name);
strcpy(p->name,pmin->name);
strcpy(pmin->name,t);
x=p->num;
p->num=pmin->num;
pmin->num=x;
}
printf("排序以后为:");
printf("\n");
output(head);
break;
default:
{
printf("输入的数字无效,请重新输入:");
sort(head);
}
}
}
void change(struct student *head)
{
int num,flag,tn;
char tc[20];
struct student *pi;
flag=0;
printf("请输入你要修改同学的学号");
scanf("%d",&num);
for(pi=head;pi!=NULL;pi=pi->next)
{
if(pi->num==num)
{
flag++;
printf("请输入你要修改的信息\n");
printf("姓名:");
scanf("%s",tc);
printf("成绩:");
scanf("%d",&tn);
pi->num=tn;
strcpy(pi->name,tc);
}
}
if(flag==1)
{
printf("修改后的学生信息为:\n");
output(head);
}
if(flag==0)
{
printf("输入学号错误,请重新输入");
change(head);
}
}
void find(struct student *head)
{
int nf,n;
struct student *ptail,*p,*pi;
n=0;
printf("有以下查找方式,请选择");
printf("1.姓名");
printf("2.学号");
printf("你的选择是:");
scanf("%d",&nf);
switch(nf)
{
case 1:
char name[20];
printf("请输入你需要查找的姓名:");
scanf("%s",name);
for(pi=head;pi!=NULL;pi=pi->next)
{
if(strcmp(pi->name,name)==0)
{
p=(struct student *)malloc(sizeof(struct student));
p->num=pi->num;
strcpy(p->name,name);
p->score=pi->score;
}
if(n==0)
{
head=p;
ptail=p;
n++;
}
else
{
ptail->next=p;
ptail=p;
n++;
}
}
if(head!=NULL)
{
ptail->next=NULL;
}
output(head);
break;
case 2:
int num;
printf("请输入你需要查找的学号:");
scanf("%d",&num);
for(pi=head;pi!=NULL;pi=pi->next)
{
if(pi->num==num)
{
p=(struct student *)malloc(sizeof(struct student));
p->num=num;
strcpy(p->name,pi->name);
p->score=pi->score;
}
if(n==0)
{
head=p;
ptail=p;
n++;
}
else
{
ptail->next=p;
ptail=p;
n++;
}
}
if(head!=NULL)
{
ptail->next=NULL;
}
output(head);
break;
default:
{
printf("输入的数字无效,请重新输入");
find(head);
}
}
}
void option(struct student *head,int n,int num)
{
switch(num)
{
case 1:
printf("你已经录入了学生信息--");
printf("请查看菜单重新选择--");
printf("请输入你的选择\n");
printf("你的选择是:");
scanf("%d",&num);
option(head,n,num);
break;
case 2:
add(head);
break;
case 3:
remove(head);
break;
case 4:
change(head);
break;
case 5:
find(head);
break;
case 6:
sort(head);
break;
case 7:
printf("谢谢使用");
break;
default:
printf("输入的数字无效,请重新输入");
}
}
int main()
{
int n,num;
struct student *head;
welcome();
printf("\t\t\t\t请先录入学生信息\n");
printf("\t\t\t\t请输入你要录入的学生人数:");
scanf("%d",&n);
head=input(n);
printf("\t\t\t\t以下是录入的学生信息\n");
output(head);
printf("请查看菜单输入你的选择\n");
printf("你的选择是:");
scanf("%d",&num);
option(head,n,num);
return 0;
}
学生成绩管理系统完整版
最新推荐文章于 2024-10-17 19:09:32 发布