#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//定义链表
typedef struct Link{
int stu_no;
char name[3];
double kc1,kc2,kc3;
double ave,sum;
struct Link * next;
}Link;//链表的别名
//初始化链表(含头结点)
Link * InitList(){
int i;
Link * p = (Link *)malloc(sizeof(Link));//动态分配内存
Link * tmp = p; //指向头结点
// sheng cheng lian biao
for(i = 0; i < 5; i++)
{
Link * a = (Link *)malloc(sizeof(Link));//创建新节点并分配内存
//fu zhi
a->stu_no = i;
a->name[0]='A'+i;
a->name[2]=a->name[1]=a->name[0];
a->kc1 = i * 1.0;
a->kc2 = i * 2.0;
a->kc3 = i * 3.0;
a->ave = (a->kc1+a->kc2+a->kc3) / 3.0;
a->sum = (a->kc1+a->kc2+a->kc3) * 1.0;
a->next = NULL;
tmp->next = a;
tmp = tmp->next;
}
return p;
}
//添加一个新的节点
Link * AddList(Link * p)
{
Link * add = (Link *)malloc(sizeof(Link));
Link * tmp = p;
int i;
char quit;
printf("Please input add student information :\n");
scanf("%d%s%lf%lf%lf",&add->stu_no,&add->name,&add->kc1,&add->kc2,&add->kc3);
//判断分数是否合理
if(add->kc1>100||add->kc2>100||add->kc3>100||add->kc1<0||add->kc2<0||add->kc3<0)
{
printf("the score input error, please continue enter! (vlaue in 0~100)");
return p;
}
add->ave = (add->kc1+add->kc2+add->kc3) / 3;
add->sum = add->kc1+add->kc2+add->kc3;
for(i=0;tmp->next;i++)
{
//判断该学生是否已经存在
if(tmp->next->stu_no == add->stu_no)
{
printf("The student already exists, add student failure!!!");
return p;
}
if(tmp->next->stu_no > add->stu_no)//按照学号从小到大插入节点
{
add->next = tmp->next;//插入节点指向当前节点的下一节点
tmp->next = add;//插入节点插入到当前节点之后
break;
}
tmp = tmp->next;//向后遍历链表
}
if(tmp->next == NULL)
{
add->next = tmp->next;
tmp->next = add;
}
return p;
}
//根据学号删除对应的节点
Link * DelList(Link * p)
{
Link * tmp = p;
int stu_no,i;
printf("Plese input should delete stu_no:\n");
scanf("%d",&stu_no);
for(i = 0;tmp->next;i++)
{
if(tmp->next->stu_no == stu_no)
{
tmp->next=tmp->next->next;//当前节点的下一节点被删除
return p;
}
tmp=tmp->next;
}
if(tmp->next == NULL)
{
printf("The student not exists, delete failure!!!");
}
return p;
}
//根据学号修改节点信息
Link * ModifyList(Link *p)
{
Link * tmp = p;
Link * mod = (Link *)malloc(sizeof(Link));
int stu_no,i;
printf("Please input should Modify stu_no:\n");
scanf("%d",&stu_no);
for(i = 0; tmp->next; i++)
{
if(tmp->next->stu_no == stu_no)
{
printf("Please input after Modify student information:\n");
scanf("%s%lf%lf%lf",&mod->name,\
&mod->kc1,&mod->kc2,&mod->kc3);
//判断分数是否合理
if(mod->kc1>100||mod->kc2>100||mod->kc3>100||\
mod->kc1<0||mod->kc2<0||mod->kc3<0)
{
printf("the score input error, please continue enter! (vlaue in 0~100)");
return p;
}
mod->sum = (mod->kc1+mod->kc2+mod->kc3);
mod->ave = mod->sum / 3;
tmp->next = mod;
printf("This is after Modify student information:\n");
printf("stu_no: %d name: %s Chinese: %.2f English: %.2f Math: %.2f Average: %.2f Sum: %.2f\n",\
tmp->next->stu_no,tmp->next->name,tmp->next->kc1,tmp->next->kc2,tmp->next->kc3,tmp->next->ave,tmp->next->sum);
return p;
}
tmp = tmp->next;
}
if(tmp->next == NULL)
{
printf("The student not exists, modify failure!!!");
}
return p;
}
//根据学号查找
Link * SearchList(Link *p)
{
Link * tmp = p;
int stu_no,i;
printf("Please input should serach stu_no:\n");
scanf("%d",&stu_no);
for(i = 0; tmp->next; i++)//遍历链表寻找与学号匹配的节点
{
if(tmp->next->stu_no == stu_no)
{
printf("stu_no: %d name: %s Chinese: %.2f English: %.2f Math: %.2f Average: %.2f Sum: %.2f\n",\
tmp->next->stu_no,tmp->next->name,tmp->next->kc1,tmp->next->kc2,tmp->next->kc3,tmp->next->ave,tmp->next->sum);
return p;
}
tmp = tmp->next;
}
if(tmp->next == NULL)
{
printf("The student not exists, search failure!!!");
}
return p;
}
//打印学生成绩列表
void Display(Link * p)
{
Link * tmp = p;
int i;
printf(" This is all student information:\n");
if(tmp->next == NULL)
{
printf("\t\t\t\t\tNO Student Information!!!\n");
}
for( i = 0 ; tmp->next ; i++)
{
tmp = tmp->next;
printf("stu_no: %d name: %s Chinese: %.2f English: %.2f Math: %.2f Average: %.2f Sum: %.2f\n",tmp->stu_no,tmp->name,tmp->kc1,tmp->kc2,tmp->kc3,tmp->ave,tmp->sum);
}
}
void menu()
{
printf("\t\t\t\t\t\t ----------------\n");
printf("\t\t\t\t\t\t |学生成绩管理系统|\n");
printf("\t\t\t\t\t\t ----------------\n");
printf("\t\t\t\t\t --------------------------------------\n");
printf("\t\t\t\t\t|**************************************|\n");
printf("\t\t\t\t\t|**************************************|\n");
printf("\t\t\t\t\t|************1.增加学生信息************|\n");
printf("\t\t\t\t\t|************2.删除学生信息************|\n");
printf("\t\t\t\t\t|************3.修改学生信息************|\n");
printf("\t\t\t\t\t|************4.查找学生信息************|\n");
printf("\t\t\t\t\t|************5.打印学生信息************|\n");
printf("\t\t\t\t\t|************6.退出当前系统************|\n");
printf("\t\t\t\t\t|**************************************|\n");
printf("\t\t\t\t\t|**************************************|\n");
printf("\t\t\t\t\t| ---制作人:YJB--- |\n");
printf("\t\t\t\t\t --------------------------------------\n");
}
int main()
{
Link * p;
int i;
p = InitList();
menu();
while(1){
printf("Please input the number before the operation (1~6):");
scanf("%d",&i);
system("cls");//清屏指令
switch(i)
{
case 1:
AddList(p);
break;
case 2:
DelList(p);
break;
case 3:
ModifyList(p);
break;
case 4:
SearchList(p);
break;
case 5:
Display(p);
break;
case 6:
return 0;
break;
default:
printf("Input error, please continue input!");
}
Sleep(5000);
system("cls");//清屏指令
menu();
}
return 0;
}
请使用手机"扫一扫"x