您的位置:首页 > 其它

成绩管理系统链表实现

2013-03-26 08:27 429 查看




#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

typedef struct L
{
char Name[30];
long long Num;
float English;
float C_language;
struct L *Next;
}*Node;

void Menu();                    //功能菜单
void Search(Node p);            //查找
void Name_Search(Node p);        //按姓名查找
void Num_Search(Node p);          //按学号查找
void Initialization(Node p);      //初始化表
void Add(Node p);              // 添加
void Insert(Node p);             //插入
void Delet(Node p);               //删除
void Show(Node p);                 //显示
void Sort(Node p);            //排序
void C_Sort(Node p);           //c成绩排序
void En_Sort(Node p);           //英语成绩排序
void Num_Sort(Node p);       // 学号排序
void All_Sort(Node p);          //总成绩排序
void Most(Node p);                  //最大值
void DelName(Node p);         //按姓名删除
void DelNum(Node p);       //按学号删除
void Modify(Node p);            //修改
void Num_Modify(Node p);         //按学号修改
void Name_Modify(Node p);       //按姓名修改
int main()
{
int n;
Node p=new struct L;
system("color 1a");
Initialization(p);
Menu();
printf("\t选择:\n");
printf("\t");
while(scanf("%d",&n)!=EOF)
{
switch(n)
{
case 1:
Add(p);fflush(stdin);break;
case 2:
Show(p);fflush(stdin);break;
case 3:
Insert(p);fflush(stdin);break;
case 4:
Sort(p);fflush(stdin);break;
case 5:
Delet(p);fflush(stdin);break;
case 6:
Search(p);fflush(stdin);break;
case 7:
Modify(p);fflush(stdin);break;
case 8:fflush(stdin);
return 0;
default :fflush(stdin);
printf("\t没有该选项:\n");
}

getch();
printf("\t");
system("cls");
Menu();
printf("\t选择:\n");
printf("\t");
}
return 0;
}
void Menu()
{
printf("\n");
printf("\t              成绩管理系统 \3\n");
printf("        --------------------------------------\n");
printf("\t|\t1:添加\t   |\t2:输出\t     |\n");
printf("        --------------------------------------\n");
printf("\t|\t3:插入\t   |\t4:排序\t     |\n");
printf("        --------------------------------------\n");
printf("\t|\t5:删除\t   |\t6:查询\t     |\n");
printf("        --------------------------------------\n");
printf("\t|\t7:修改\t   |\t8:退出\t     |\n");
printf("        --------------------------------------\n");
printf("\n");
printf("\t提示:每一步操作结束后请按1-2次回车\n");
printf("\t");
printf("\n");
}
void Initialization(Node p)
{
p->Next=NULL;
p->Num=0;
}
void Add(Node p)
{
p->Num++;
while(p->Next!=NULL)
{
p=p->Next;
}
Node q=(Node)malloc(sizeof(struct L));
printf("\t输入姓名:\n");
printf("\t");
scanf("%s",&q->Name);
printf("\t输入学号:\n");
printf("\t");
scanf("%lld",&q->Num);
printf("\t输入英语成绩:\n");
printf("\t");
scanf("%f",&q->English);
printf("\t输入C语言成绩:\n");
printf("\t");
scanf("%f",&q->C_language);
p->Next=q;
q->Next=NULL;
printf("\t添加成功!\n");
getch();
}
void Insert(Node p)
{
p->Num++;
printf("\t输入插入位置:\n");
int n;
printf("\t");
scanf("%d",&n);
if(n<=0)
{
printf("位置错误!\n");
return;
}
n-=1;
while(n--)
{
p=p->Next;
}
Node q=(Node)malloc(sizeof(struct L));
printf("\t输入姓名:\n");
scanf("%s",&q->Name);
printf("\t输入学号:\n");
scanf("%lld",&q->Num);
printf("\t输入英语成绩:\n");
scanf("%f",&q->English);
printf("\t输入C语言成绩:\n");
scanf("%f",&q->C_language);
q->Next=p->Next;
p->Next=q;
printf("\t插入成功!\n");
getch();
}
void Delet(Node p)
{
if(p->Num==0)
{
printf("\t没有可删除的数据!\n");
return;
}
p->Num--;
printf("\t选择:\n");
printf("\t1:按姓名删除:\n");
printf("\t2:按学号删除:\n");
int n;
printf("\t");
scanf("%d",&n);
switch(n)
{
case 1:DelName(p);break;
case 2:DelNum(p);break;
default:printf("\t无此选择!\n");break;
}
printf("\t删除成功!\n");
getch();
}
void DelName(Node p)
{
char s[30];
printf("\t输入姓名:\n");
printf("\t");
scanf("%s",&s);
Node q=p;
for(q=q->Next;q->Next!=NULL;q=q->Next,p=p->Next)
{
if(!strcmp(q->Name,s))
{
p->Next=p->Next->Next;
}
}
getch();
}
void DelNum(Node p)
{
long long n;
printf("\t输入学号:\n");
printf("\t");
scanf("%lld",&n);
Node q=p;
for(q=q->Next;q->Next!=NULL;q=q->Next,p=p->Next)
{
if(q->Num==n)
{
p->Next=p->Next->Next;
}
}
getch();
}
void Show(Node p)
{
if(p->Num==0)
{
printf("\t没有可显示的数据!\n");
return;
}
int len=p->Num;
p=p->Next;
for(int i=0;i<len;++i)
{
printf("        -------------------------------------------------\n");
printf("\t|\t姓名:\t\t|\t%s\n",p->Name);
printf("        -------------------------------------------------\n");
printf("\t|\t学号:\t\t|\t%lld\n",p->Num);
printf("        -------------------------------------------------\n");
printf("\t|\t英语:\t\t|\t%.2f\n",p->English);
printf("        -------------------------------------------------\n");
printf("\t|\tC语言:\t\t|\t%.2f\n",p->C_language);
printf("        -------------------------------------------------\n");
printf("\t|\t总分:\t\t|\t%.2f\n",p->English+p->C_language);
printf("        -------------------------------------------------\n");
printf("\n");
p=p->Next;
}
printf("\t显示完!\n");
getch();
}
void C_Sort(Node p)
{
Node x,y;
int len=p->Num;
for(int i=0;i<len;++i)
{
p=p->Next;
x=p;
y=p->Next;
for(int j=i+1;j<len;++j)
{
if(x->C_language>y->C_language)
{
x=y;
}
y=y->Next;
}
float a,b;
long long w;
char s[30];
w=x->Num;
x->Num=p->Num;
p->Num=w;
strcpy(s,x->Name);
strcpy(x->Name,p->Name);
strcpy(p->Name,s);
a=x->C_language;
x->C_language=p->C_language;
p->C_language=a;
b=x->English;
x->English=p->English;
p->English=b;
}
printf("\t排序成功!\n");
getch();
}
void Sort(Node p)
{
if(p->Num==0)
{
printf("\t没有可排序的数据!\n");
return;
}
printf(" \t选择:\n");
printf(" \t1:C语言成绩从小到大排序:\n");
printf(" \t2:英语成绩从小到大排序:\n");
printf(" \t3:总成绩从小到大排序:\n");
printf(" \t4:学号从小到大排序:\n");
int n;
printf("\t");
scanf("%d",&n);
switch(n)
{
case 1:C_Sort(p);break;
case 2:En_Sort(p);break;
case 3:All_Sort(p);break;
case 4:Num_Sort(p);break;
default:printf("\t无此选择!\n");break;
}
getch();
}
void En_Sort(Node p)
{
Node x,y;
int len=p->Num;
for(int i=0;i<len;++i)
{
p=p->Next;
x=p;
y=p->Next;
for(int j=i+1;j<len;++j)
{
if(x->English>y->English)
{
x=y;
}
y=y->Next;
}
float a,b;
char s[30];
long long w;
w=x->Num;
x->Num=p->Num;
p->Num=w;
strcpy(s,x->Name);
strcpy(x->Name,p->Name);
strcpy(p->Name,s);
a=x->C_language;
x->C_language=p->C_language;
p->C_language=a;
b=x->English;
x->English=p->English;
p->English=b;
}
printf("\t排序成功!\n");
getch();
}
void Search(Node p)
{
if(p->Num==0)
{
printf("\t没有可查找的数据!\n");
return;
}
printf(" \t选择:\n");
printf(" \t1:按姓名查询:\n");
printf(" \t2:按学号查询:\n");
int n;
printf("\t");
scanf("%d",&n);
switch(n)
{
case 1:Name_Search(p);break;
case 2:Num_Search(p);break;
default:printf("\t无此选择!\n");break;
}
getch();
}
void Name_Search(Node p)
{
char ap[30];
printf("\t输入姓名:\n");
printf("\t");
scanf("%s",&ap);
int len=p->Num;
p=p->Next;
int i;
for(i=0;i<len;++i)
{
if(!strcmp(ap,p->Name))
{
printf("        -------------------------------------------------\n");
printf("\t|\t姓名:\t\t|\t%s\n",p->Name);
printf("        -------------------------------------------------\n");
printf("\t|\t学号:\t\t|\t%lld\n",p->Num);
printf("        -------------------------------------------------\n");
printf("\t|\t英语:\t\t|\t%.2f\n",p->English);
printf("        -------------------------------------------------\n");
printf("\t|\tC语言:\t\t|\t%.2f\n",p->C_language);
printf("        -------------------------------------------------\n");
printf("\t|\t总分:\t\t|\t%.2f\n",p->English+p->C_language);
printf("        -------------------------------------------------\n");
break;
}
p=p->Next;
}
if(i>=len)
{
printf("\t没有找到该学生!\n");
}
getch();
}
void Num_Search(Node p)
{
long long sd;
printf("\t输入学号:\n");
printf("\t");
scanf("%lld",&sd);
int len=p->Num;
p=p->Next;
int i;
for(i=0;i<len;++i)
{
if(sd==p->Num)
{
printf("        -------------------------------------------------\n");
printf("\t|\t姓名:\t\t|\t%s\n",p->Name);
printf("        -------------------------------------------------\n");
printf("\t|\t学号:\t\t|\t%lld\n",p->Num);
printf("        -------------------------------------------------\n");
printf("\t|\t英语:\t\t|\t%.2f\n",p->English);
printf("        -------------------------------------------------\n");
printf("\t|\tC语言:\t\t|\t%.2f\n",p->C_language);
printf("        -------------------------------------------------\n");
printf("\t|\t总分:\t\t|\t%.2f\n",p->English+p->C_language);
printf("        -------------------------------------------------\n");
break;
}
p=p->Next;
}
if(i>=len)
{
printf("\t没有找到该学生!\n");
}
getch();
}
void Modify(Node p)
{
if(p->Num==0)
{
printf("\t没有可修改的数据!\n");
return;
}
printf(" \t选择:\n");
printf(" \t1:输入姓名修改:\n");
printf(" \t2:输入学号修改:\n");
int n;
printf("\t");
scanf("%d",&n);
switch(n)
{
case 1:Name_Modify(p);break;
case 2:Num_Modify(p);break;
default:printf("\t无此选择!\n");break;
}
getch();
}
void Num_Modify(Node p)
{
long long sd;
printf("\t输入学号:\n");
printf("\t");
scanf("%lld",&sd);
int len=p->Num;
p=p->Next;
int i;
for(i=0;i<len;++i)
{
if(sd==p->Num)
{
printf("        -------------------------------------------------\n");
printf("\t|\t姓名:\t\t|\t%s\n",p->Name);
printf("        -------------------------------------------------\n");
printf("\t|\t学号:\t\t|\t%lld\n",p->Num);
printf("        -------------------------------------------------\n");
printf("\t|\t英语:\t\t|\t%.2f\n",p->English);
printf("        -------------------------------------------------\n");
printf("\t|\tC语言:\t\t|\t%.2f\n",p->C_language);
printf("        -------------------------------------------------\n");
printf("\t这是之前的数据!\n");
printf("\t现在请更改!\n");
printf("\t输入姓名:\n");
printf("\t");
scanf("%s",&p->Name);
printf("\t输入学号:\n");
printf("\t");
scanf("%lld",&p->Num);
printf("\t输入英语成绩:\n");
printf("\t");
scanf("%f",&p->English);
printf("\t输入C语言成绩:\n");
printf("\t");
scanf("%f",&p->C_language);
printf("\t修改成功!\n");
getch();
break;
}
p=p->Next;
}
if(i>=len)
{
printf("\t没有找到该学生!\n");
}
getch();

}
void Name_Modify(Node p)
{
char ap[30];
printf("\t输入姓名:\n");
printf("\t");
scanf("%s",&ap);
int len=p->Num;
p=p->Next;
int i;
for(i=0;i<len;++i)
{
if(!strcmp(ap,p->Name))
{
printf("        -------------------------------------------------\n");
printf("\t|\t姓名:\t\t|\t%s\n",p->Name);
printf("        -------------------------------------------------\n");
printf("\t|\t学号:\t\t|\t%lld\n",p->Num);
printf("        -------------------------------------------------\n");
printf("\t|\t英语:\t\t|\t%.2f\n",p->English);
printf("        -------------------------------------------------\n");
printf("\t|\tC语言:\t\t|\t%.2f\n",p->C_language);
printf("        -------------------------------------------------\n");
printf("\t这是之前的数据!\n");
printf("\t现在请更改!\n");
printf("\t输入姓名:\n");
printf("\t");
scanf("%s",&p->Name);
printf("\t输入学号:\n");
printf("\t");
scanf("%lld",&p->Num);
printf("\t输入英语成绩:\n");
printf("\t");
scanf("%f",&p->English);
printf("\t输入C语言成绩:\n");
printf("\t");
scanf("%f",&p->C_language);
printf("\t修改成功!\n");
getch();
break;
}
p=p->Next;
}
if(i>=len)
{
printf("\t没有找到该学生!\n");
}
getch();

}
void All_Sort(Node p)
{
Node x,y;
int len=p->Num;
for(int i=0;i<len;++i)
{
p=p->Next;
x=p;
y=p->Next;
for(int j=i+1;j<len;++j)
{
if((x->English+x->C_language)>(y->English+y->C_language))
{
x=y;
}
y=y->Next;
}
float a,b;
char s[30];
long long w;
w=x->Num;
x->Num=p->Num;
p->Num=w;
strcpy(s,x->Name);
strcpy(x->Name,p->Name);
strcpy(p->Name,s);
a=x->C_language;
x->C_language=p->C_language;
p->C_language=a;
b=x->English;
x->English=p->English;
p->English=b;
}
printf("\t排序成功!\n");
getch();
}
void Num_Sort(Node p)
{
Node x,y;
int len=p->Num;
for(int i=0;i<len;++i)
{
p=p->Next;
x=p;
y=p->Next;
for(int j=i+1;j<len;++j)
{
if(x->Num>y->Num)
{
x=y;
}
y=y->Next;
}
float a,b;
char s[30];
long long w;
w=x->Num;
x->Num=p->Num;
p->Num=w;
strcpy(s,x->Name);
strcpy(x->Name,p->Name);
strcpy(p->Name,s);
a=x->C_language;
x->C_language=p->C_language;
p->C_language=a;
b=x->English;
x->English=p->English;
p->English=b;
}
printf("\t排序成功!\n");
getch();
}

成绩管理系统改良版:点击打开
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: