单链表学生成绩管理系统(精简版)——菜鸡随便写写

#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
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值