#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*定义学生类型*/
typedef struct student
{
char stuid[16];//学号
char name[16];//学生姓名
int score;//学生成绩
struct student* next;//指向下一个学生的指针
}Stu;
/*通过尾插法,建立一个带头结点的学生链表*/
Stu* init()
{
Stu* head;
head = (Stu*)malloc(sizeof(Stu));
head->next = NULL;
Stu* p;
p = head;
Stu* q;
printf("请输入学生个数:");
int i;
scanf("%d", &i);
printf("学号 姓名 成绩\n");
while (i--)
{
q = (Stu*)malloc(sizeof(Stu));
scanf("%s", &q->stuid);
scanf("%s", &q->name);
scanf("%d", &q->score);
p->next = q;
p = q;
}
p->next = NULL;
return head;
}
/*对学生信息查找*/
Stu* find(Stu* head, char a[])
{
Stu* p = head->next;
while (p && (strcmp(p->name, a) != 0))
p = p->next;
if (p)
return p;
return NULL;
}
/*打印学生相关信息*/
void display(Stu* p)
{
Stu* q = p->next;
printf("学号 姓名 成绩\n");
while (q)
{
printf("%10s %10s%4d\n", q->stuid, q->name, q->score);
q = q->next;
}
}
/*对学生信息进行插入操作*/
void* insert(Stu* head,char a[])
{
Stu* q, *p;
q = find(head, a);
if (!q)
{
printf("未查找到该学生,无法进行插入操作\n");
}
else
{
p = (Stu*)malloc(sizeof(Stu));
printf("请依次输入要插入的学生的学号、姓名、成绩:");
scanf("%s %s %d", p->stuid, p->name, &(p->score));
p->next = q->next;
q->next = p;
printf("插入成功,进行更新后,学生信息如下:\n");
display(head);
}
}//此函数只能实行对非头位置的插入操作
/*对学生信息进行插入操作*/
void* inser(Stu* head)
{
Stu* p;
p= (Stu*)malloc(sizeof(Stu));
printf("请依次输入要插入的学生的学号、姓名、成绩:");
scanf("%s %s %d", p->stuid, p->name, &(p->score));
p->next = head->next;
head->next = p;
}//此函数只能实行对头位置的插入操作
/*对学生信息进行修改操作*/
void* alter(Stu* head, char a[])
{
Stu* q;
q = find(head, a);
if (q)
{
printf("请输入要修改的学生的新的信息,即顺序输入学号、姓名、成绩:");
scanf("%s %s %d", q->stuid, q->name, &(q->score));
printf("修改成功,进行更新后,学生信息如下:\n");
display(head);
}
else
printf("未查找到该学生,修改失败,");
}
/*对学生信息进行删除操作*/
Stu* delet(Stu* head, char a[])
{
Stu* q;
Stu *pre = head;
q = head->next;
while (q && (strcmp(q->name, a) != 0))
{
pre = q;
q = q->next;
}
if (q)
{
pre->next = q->next;
free(q);
printf("删除成功,进行更新后,学生信息如下:\n");
display(head);
}
else
printf("未查找到该学生,删除失败,");
}
/*对学生进行成绩排序*/
void C_sort(Stu* p)
{
Stu* begin = p->next;
Stu* end = NULL;
char a[16];//中间变量用于交换
int b;//中间变量用于交换
while (p->next->next != end)
{
while (begin->next != end) //冒泡排序法
{
if (begin->score < begin->next->score)
{
strcpy(a, begin->name);
strcpy(begin->name, begin->next->name);
strcpy(begin->next->name, a);/* 以上为对名字交换*/
strcpy(a, begin->stuid);
strcpy(begin->stuid, begin->next->stuid);
strcpy(begin->next->stuid, a);/* 以上为对学号交换*/
b = begin->score;
begin->score = begin->next->score;
begin->next->score = b;
}
begin = begin->next;
}
end = begin;
begin = p->next;
}
}
void main()
{
printf("--------------学生成绩管理系统--------------\n");
Stu* p;
p = init();//对学生进行初始化构造链表
printf("进入到学生成绩表修改系统\n");
printf("1、添加学生信息,注:本功能需要查找到要添加的位置的前一个学生姓名\n");
printf("2、修改学生信息,注:本功能需要查找到要修改的学生姓名\n");
printf("3、删除学生信息,注:本功能需要查找到要删除的学生姓名\n");
printf("0、退出退出学生成绩表修改系统,并进入学生成绩排序\n");
printf("请输入功能所对应的序号:");
int i;
scanf("%d", &i);
char a[16];
while (i)
{
if (i == 1)
{
printf("如果要插入到头位置,则输入1,否则输入0:");
scanf("%d", &i);
if (i == 1)
{
inser(p);
printf("进行更新后,学生信息如下:\n");
display(p);
}
else
{
printf("请输入要插入位置的前一个学生的姓名:");
scanf("%s", a);
insert(p, a);
}
printf("请输入功能所对应的序号:");
scanf("%d", &i);
continue;
}
else if (i == 2)
{
printf("请输入要修改的学生姓名:");
scanf("%s", a);
alter(p,a);
printf("请输入功能所对应的序号:");
scanf("%d", &i);
continue;
}
else if (i == 3)
{
printf("请输入要删除的学生的姓名:");
scanf("%s", a);
delet(p, a);
printf("请输入功能所对应的序号:");
scanf("%d", &i);
continue;
}
else if (i == 0)
break;
else
{
printf("输入的功能序号有误请重新输入:");
scanf("%d", &i);
}
}
printf("退出学生成绩表修改系统,进入学生成绩排序系统\n");
printf("学生经过成绩排序后如下所示\n");
C_sort(p); //按成绩排序
display(p); //打印学生信息
printf("\n退出学生成绩排序系统,进入学生个人成绩查询系统\n");
char j[16];
printf("请输入待查学生姓名:");
scanf("%s", &j);
i = 1;
while (i)
{
Stu* q;
q = find(p, j);
if (q)
{
printf("该学生成绩为%d", q->score);
printf("\n是否进行再查找,如果是请输入1,否则请输入0:");
scanf("%d", &i);
}
else
{
printf("未查找到该学生\n是否进行再查找,如果是请输入1,否则请输入0:");
scanf("%d", &i);
}
if (!i)
break;
printf("请输入待查学生姓名:");
scanf("%s", &j);
}
printf("退出学生成绩管理系统");
}


陌夏微秋
- 粉丝: 2338
最新资源
- 主要是在学习李航的统计学习方法和周志华的机器学习西瓜书的笔记和相关的代码实现
- 单片机技术试题集.doc
- 基于卷积神经网络的图像分类技术.docx
- JavaEE物联网云计算系列培训教材-Oracle数据库设计01.ppt
- 《计算机应用基础Windows-xp》综合练习.doc
- 清大学习吧项目管理手册汇编.doc
- 基于单片机的数字秒表系统研究设计.doc
- 数字图像处理期末考试答案.docx
- 中职服装专业课堂教学信息化探究.docx
- 创客教育在《计算机应用基础》课程教学中的应用.docx
- 大数据时代高校资产管理信息化建设研究.docx
- BIM+智慧工地的项目管理模式探究.docx
- 论网络虚拟财产的刑法保护.docx
- 计算机网络安全防范策略.docx
- 【高中信息技术课件】算法及其实现.ppt
- 国内外大数据下政策评估研究综述.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


