安徽科技学院 信网学院网络文化节 马云霄

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <malloc.h>
typedef struct student
{

char name[10];
char schoolid[10];
char classid[10];
int grade_1;
int grade_2;
int grade_3;
int grade_4;
int grade_5;
int grade_6;
int grade_7;
int grade_8;
int grade_9;
int grade_10;
int avergrade;
struct student *next;

}stu;

void creatstu(stu *&L)
{
L = (stu *)malloc(sizeof(stu));
L->next = NULL;
}
void input_1(stu *&L)
{
stu *p,*q=L;//新–尾结点指针;
char flag[10];
while (1)
{
printf("(提示:输入‘no’返回主菜单!)\n");
printf(“姓名:”);
scanf("%s", flag);
if (strcmp(flag, “no”) == 0)
{
break;
}
p = (stu *)malloc(sizeof(stu));
strcpy(p->name,flag);
//p->name = flag;
printf("\n");
printf(“学号:”);
scanf("%s", &p->schoolid);
printf("\n");
printf(“班号:”);
scanf("%s", &p->classid);
printf("\n");
printf(“请选择输入10次成绩的方式:[1]顺序一次性输入 [2]自定义输入\n”);
int sel;
scanf("%d",&sel);
switch(sel)
{

    case 1:

        printf("第一次成绩:");
        scanf("%d",&p->grade_1);
        printf("\n");
        printf("第二次成绩:");
        scanf("%d",&p->grade_2);
        printf("\n");
        printf("第三次成绩:");
        scanf("%d",&p->grade_3);
        printf("\n");
        printf("第四次成绩:");
        scanf("%d",&p->grade_4);
        printf("\n");
        printf("第五次成绩:");
        scanf("%d",&p->grade_5);
        printf("\n");
        printf("第六次成绩:");
        scanf("%d",&p->grade_6);
        printf("\n");
        printf("第七次成绩:");
        scanf("%d",&p->grade_7);
        printf("\n");
        printf("第八次成绩:");
        scanf("%d",&p->grade_8);
        printf("\n");
        printf("第九次成绩:");
        scanf("%d",&p->grade_9);
        printf("\n");
        printf("第十次成绩:");
        scanf("%d",&p->grade_10);
        printf("\n");
        break;
    case 2 :

        while(1)
        {
            int i;
            printf("请选择输入第几次的成绩(1~10):");
            scanf("%d",&i);
            switch(i)
            {
                case 1:
                scanf("%d",&p->grade_1);break;
                case 2:
                scanf("%d",&p->grade_2);break;
                case 3:
                scanf("%d",&p->grade_3);break;
                case 4:
                scanf("%d",&p->grade_4);break;
                case 5:
                scanf("%d",&p->grade_5);break;
                case 6:
                scanf("%d",&p->grade_6);break;
                case 7:
                scanf("%d",&p->grade_7);break;
                case 8:
                scanf("%d",&p->grade_8);break;
                case 9:
                scanf("%d",&p->grade_9);break;
                case 10:
                scanf("%d",&p->grade_10);break;
                default:
                printf("输入错误!\n");break;
            }
            printf("按’n‘退出 !\n");
            char flag;
            scanf("%c",&flag);
            if(flag == 'n'){break;}
        }
        printf("请确认十次成绩是否都已录入?未录入的成绩会被初始化值为“0”!\n");
        break;
    }
    printf("成绩已录入!\n");
	printf("平均分根据平时十次成绩自动计算!\n");
	printf("平均分:");
	p->avergrade = (p->grade_1+p->grade_2+p->grade_3+p->grade_4+p->grade_5+
                         p->grade_6+p->grade_7+p->grade_8+p->grade_9+p->grade_10)/10;
	printf("%d\n", p->avergrade);
	printf("您已经完成一条记录的添加!\n");
	p->next=q->next;
	q->next=p;
	q=p;
}

}

int check(stu *L,char a[])
{
stu *p = L->next;
int i,sel;
while(pNULL)
{
printf(“无信息可供查询!\n”);
break;
}
printf(“查找学生的信息\n”);
printf("
=======================================================\n");
printf("!! !!\n");
printf("!! 请输入序号选择以下操作: !!\n");
printf("!! [0]退出! !!\n");
printf("!! [1]通过学号查询 !!\n");
printf("!! [2]通过姓名查询 !!\n");
printf("!! [3]通过班号查询 !!\n");
printf("!! !!\n");
printf("\n\n");
scanf("%d",&sel);printf("\n");
switch(sel)
{
case 0:
break;
case 1:

            char flag[10];
            printf("输入待查询学号:");
            scanf("%s",&flag);
            printf("\n");
            while(p!=NULL)
            {
                if(strcmp(p->schoolid,flag)==0)
                {
                    printf("该学生信息如下:\n");
                    printf("!!   学号:%s  !!\n",p->schoolid);
                    printf("!!   班号:%s  !!\n",p->classid);
                    printf("!!   姓名:%s  !!\n",p->name);
                    printf("!!   成绩[1]:%d  !!\n",p->grade_1);
                    printf("!!   成绩[2]:%d  !!\n",p->grade_2);
                    printf("!!   成绩[3]:%d  !!\n",p->grade_3);
                    printf("!!   成绩[4]:%d  !!\n",p->grade_4);
                    printf("!!   成绩[5]:%d  !!\n",p->grade_5);
                    printf("!!   成绩[6]:%d  !!\n",p->grade_6);
                    printf("!!   成绩[7]:%d  !!\n",p->grade_7);
                    printf("!!   成绩[8]:%d  !!\n",p->grade_8);
                    printf("!!   成绩[9]:%d  !!\n",p->grade_9);
                    printf("!!   成绩[10]:%d  !!\n",p->grade_10);
                    printf("!!   平均分:%d  !!\n",p->avergrade);
                    printf("***************************\n");
                    break;
                }
                else
                {
                    p = p->next;
                }
            };break;

    case 2:

            printf("输入待查询姓名:");
            scanf("%s",&flag);printf("\n");
            while(p!=NULL)
            {
                if(strcmp(p->name,flag)==0)
                {
                    printf("该学生信息如下:\n");
                    printf("!!   学号:%s  !!\n",p->schoolid);
                    printf("!!   班号:%s  !!\n",p->classid);
                    printf("!!   姓名:%s  !!\n",p->name);
                    printf("!!   成绩[1]:%d  !!\n",p->grade_1);
                    printf("!!   成绩[2]:%d  !!\n",p->grade_2);
                    printf("!!   成绩[3]:%d  !!\n",p->grade_3);
                    printf("!!   成绩[4]:%d  !!\n",p->grade_4);
                    printf("!!   成绩[5]:%d  !!\n",p->grade_5);
                    printf("!!   成绩[6]:%d  !!\n",p->grade_6);
                    printf("!!   成绩[7]:%d  !!\n",p->grade_7);
                    printf("!!   成绩[8]:%d  !!\n",p->grade_8);
                    printf("!!   成绩[9]:%d  !!\n",p->grade_9);
                    printf("!!   成绩[10]:%d  !!\n",p->grade_10);
                    printf("!!   平均分:%d  !!\n",p->avergrade);
                    printf("***************************\n");
                    break;
                }
                else
                {
                    p = p->next;
                }
            };break;
    case 3:

            printf("输入待查询班号:");
            scanf("%s",&flag);printf("\n");
            while(p!=NULL)
            {
                if(strcmp(p->classid,flag)==0)
                {
                    printf("***************************\n");
                    printf("该学生信息如下:\n");
                    printf("!!   学号:%s        !!\n",p->schoolid);
                    printf("!!   班号:%s        !!\n",p->classid);
                    printf("!!   姓名:%s        !!\n",p->name);
                    printf("!!   成绩[1]:%d     !!\n",p->grade_1);
                    printf("!!   成绩[2]:%d     !!\n",p->grade_2);
                    printf("!!   成绩[3]:%d     !!\n",p->grade_3);
                    printf("!!   成绩[4]:%d     !!\n",p->grade_4);
                    printf("!!   成绩[5]:%d     !!\n",p->grade_5);
                    printf("!!   成绩[6]:%d     !!\n",p->grade_6);
                    printf("!!   成绩[7]:%d     !!\n",p->grade_7);
                    printf("!!   成绩[8]:%d     !!\n",p->grade_8);
                    printf("!!   成绩[9]:%d     !!\n",p->grade_9);
                    printf("!!   成绩[10]:%d    !!\n",p->grade_10);
                    printf("!!   平均分:%d  !!\n",p->avergrade);
                    printf("***************************\n");
                    break;
                }
                else
                {
                    p = p->next;
                }
            };break;
    default:
            printf("输入错误!\n");
            printf("***************************\n");
            break;
}

}

int del(stu *&L,char sch_id)
{
stu *p = L->next,*q = L,*temp;//定义q为p的前驱节点
temp = q;
char flag[10];
if (p == NULL)
{
printf(“提示:没有学生信息可以删除!\n\n “);
return 0;
}
printf(” \n提示:请输入待删除学生的学号!\n “);
scanf(”%s”, &flag);
while (p!= NULL)
{
if (strcmp(p->schoolid,flag)==0)
{
break;
}
temp = q;
q = q->next;

}
if (p!=NULL)
{
    p = q->next;
    q->next = p->next;
    printf("已删除该学生信息!\n");
    printf("**************************************\n");
}

}

void scan_1(stu *&L)
{
stu *p = L->next;
if(p!=NULL)
{
while(p!=NULL)
{
printf(“所有学生信息如下:\n”);
printf(“学号:%s\n”,p->schoolid);
printf(“班号:%s\n”,p->classid);
printf(“姓名:%s\n”,p->name);
printf(“平均分:%d\n”,p->avergrade);
printf("------------------------------\n");
p = p->next;
}
}
else
{printf(“无信息!\n”);printf("-------------------------------------\n\n");}
}
void scan(stu *&L)
{
stu *p = L->next;
if(p!=NULL)
{
while(p!=NULL)
{
printf("------------------------------\n");
printf("!! 所有学生信息如下: !!\n");
printf("!!学号:%s !!\n",p->schoolid);
printf("!!班号:%s !!\n",p->classid);
printf("!!姓名:%s !!\n",p->name);
printf("!!成绩[1]:%d !!\n",p->grade_1);
printf("!!成绩[2]:%d !!\n",p->grade_2);
printf("!!成绩[3]:%d !!\n",p->grade_3);
printf("!!成绩[4]:%d !!\n",p->grade_4);
printf("!!成绩[5]:%d !!\n",p->grade_5);
printf("!!成绩[6]:%d !!\n",p->grade_6);
printf("!!成绩[7]:%d !!\n",p->grade_7);
printf("!!成绩[8]:%d !!\n",p->grade_8);
printf("!!成绩[9]:%d !!\n",p->grade_9);
printf("!!成绩[10]:%d !!\n",p->grade_10);
printf("!!平均分:%d !!\n",p->avergrade);
printf("------------------------------");
printf("------------------------------\n");
p = p->next;
}
}
else
{printf(“无信息!\n”);printf("-------------------------------------\n\n");}
}

int sortstu(stu *&L)
{
stu *p = L->next,*pre,*cur,*tail = NULL,*flag = NULL;//定义前驱pre,后驱cur节点,尾结点tail;
int temp;
if (NULL == L)
{
return 0;
}
else
{
//因为flag是记录最后一次发生交换的两个节点的前一个结点,理论上如果flag与L相等,
//那么就说明链表只是最开始的两个结点是无序的,那么第一次排序完成就不再排序,或者是第二种情况,flag
//被置为L,要是第一趟排序完成,flag仍为L,就说明没有发生交换,那么就不再进行排序
while (flag != L)
{
tail = flag;
flag = L;
pre = L;
while (pre->next != tail)
{
cur = pre->next;
if (pre->avergrade > cur->avergrade)
{
temp = pre->avergrade;
pre->avergrade = cur->avergrade;
cur->avergrade = temp;
flag = pre->next;
}
pre = pre->next;
}
}
scan_1(L);
}
}

int change(stu *&L,char a[])
{
char flag[10];
stu *p = L->next;
int i;
printf(“修改学生的记录!\n”);
printf(“通过学生姓名,学号或者班号修改信息!\n”);
printf("=========================================================\n");
printf("!! !!\n");
printf("!! 请输入序号选择以下操作: !!\n");
printf("!! [0]退出! !!\n");
printf("!! [1]通过姓名查询 !!\n");
printf("!! [2]通过学号查询 !!\n");
printf("!! [3]通过班号查询 !!\n");
printf("!! !!\n");
printf("\n\n");
int sel;
scanf("%d",&sel);
switch(sel)
{
case 0:break;
case 1:
printf(“请输入待修改的学生的姓名:”);
scanf("%s",&flag);
while(p!=NULL)
{
if(strcmp(p->name,flag)==0)
{
printf(“修改姓名:”);
scanf("%s",&p->name);
printf(“修改学号:”);
scanf("%s",&p->schoolid);
printf(“修改班号:”);
scanf("%s",&p->classid);
printf(“信息修改成功!\n”);
}break;
}
printf(“没有此学生信息!\n”);
printf("**************************\n");break;

    case 2:
        printf("请输入待修改的学生的学号:");
        scanf("%s",&flag);
        while(p!=NULL)
        {
            if(strcmp(p->schoolid,flag)==0)
            {
                printf("修改姓名:");
                scanf("%s",&p->name);
                printf("修改学号:");
                scanf("%s",&p->schoolid);
                printf("修改班号:");
                scanf("%s",&p->classid);
                printf("信息修改成功!\n");
            }break;
        }
            printf("没有此学生信息!\n");
            printf("**************************\n");break;
    case 3:
        printf("请输入待修改的学生班号:");
        scanf("%s",&flag);
        while(p!=NULL)
        {
            if(strcmp(p->classid,flag)==0)
            {
                printf("修改姓名:");
                scanf("%s",&p->name);
                printf("修改学号:");
                scanf("%s",&p->schoolid);
                printf("修改班号:");
                scanf("%s",&p->classid);
                printf("信息修改成功!\n");
            }break;
        }
        printf("没有此学生信息!\n");
        printf("**************************\n");break;
}

}

int main()
{
stu G;
G.grade_1 = 0;
G.grade_2 = 0;
G.grade_3 = 0;
G.grade_4 = 0;
G.grade_5 = 0;
G.grade_6 = 0;
G.grade_7 = 0;
G.grade_9 = 0;
G.grade_10 = 0;
stu L;
creatstu(L);
int flag;
while(1)
{
printf("\n");
printf("!! 欢迎使用学生作业管理系统 !!\n");
printf("!! !!\n");
printf("!! 请输入序号选择以下操作: !!\n");
printf("!! [0]退出系统,谢谢使用! !!\n");
printf("!! [1]添加学生信息 !!\n");
printf("!! [2]修改学生信息 !!\n");
printf("!! [3]浏览所有学生信息 !!\n");
printf("!! [4]指定查看学生信息 !!\n");
printf("!! [5]输入学号删除学生全部信息 !!\n");
printf("!! [6]学生平均分升序排列 !!\n");
printf("!! !!\n");
printf("
\n\n");
printf(“请输入:”);
scanf("%d", &flag);
switch (flag)
{
case 0: printf(" \n提示:按’0’退出系统!\n "); break;
case 1: input_1(L); break; //添加学生信息
case 2: change(L,L->name); break; //修改学生信息
case 3: scan(L); break; //显示学生信息
case 4: check(L,L->name); break; //查询学生信息
case 5: del(L,*L->schoolid);break;
case 6: sortstu(L);break; //平均分升序排列
default: printf(“提示:输入错误!\n “);printf(”//\n”);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值