#include <stdio.h>
#include <malloc.h>
#include<string.h>
typedef struct Student {
char name[10];
int number;
char sex;
char grade;
}Student;
typedef struct Node {
Student file;
struct Node *next;
}Node, *Link;
void inputStuentInformation(Link x) {
printf("请输入该学生的姓名:");
scanf_s("%s", x->file.name,10);
printf("请输入该学生的学号:");
scanf_s("%d", &x->file.number);
getchar(); //吃掉\n,因为%c会scan上一行的回车
printf("请输入该学生的性别:");
scanf_s("%c", &x->file.sex,1);
getchar();
printf("请输入该学生的成绩:");
scanf_s("%c", &x->file.grade,1);
x->next = NULL;
}
void addFile(Link head) {
Link p = head, q = head->next;
Link node = (Link)malloc(sizeof(Node));
node->next = NULL;
inputStuentInformation(node);
if (head->next == NULL) {
p->next = node;
}
else {
while (q != NULL) {
if (node->file.number == q->file.number) {
printf("error\n");
}
else if (node->file.number > q->file.number) {
p = p->next;
q = q->next;
}
else {
p->next = node;
node->next = q;
break;
}
}
if (q == NULL) {
p->next = node;
}
}
}
void showFile(Link head) {
Link p = head->next;
while (p != NULL) {
printf("姓名:%s\n",p->file.name);
printf("学号:%d\n", p->file.number);
printf("性别:%c\n", p->file.sex);
printf("成绩:%c\n", p->file.grade);
printf("\n");
p = p->next;
}
}
void deleteFile(Link head, int number) {
Link p = head, q = head->next;
while (q!=NULL) {
if (number != q->file.number) {
p = p->next;
q = q->next;
}
else {
p->next = q->next;
free(q);
break;
}
}
if (q == NULL) {
printf("未查找到该学生\n\n");
}
}
void searchFile(Link head, int number) {
Link p = head->next;
while (p != NULL) {
if (number != p->file.number) {
p = p->next;
}
else {
printf("该学生信息如下:\n");
printf("姓名:%s\n", p->file.name);
printf("学号:%d\n", p->file.number);
printf("性别:%c\n", p->file.sex);
printf("成绩:%c\n", p->file.grade);
printf("\n");
break;
}
}
if (p == NULL) {
printf("未查找到该学生\n\n");
}
}
int Filelength(Link head) {
Link p = head->next;
int length=0;
while (p != NULL) {
length++;
p = p->next;
}
return length;
}
void clearFile(Link head) {
while (head != NULL) {
Link p = head;
head = head->next;
free(p);
}
}
int main(){
Link head = (Link)malloc(sizeof(Node));
head->next = NULL;
int select,number;
while (1) {
printf("\n请输入数字使用相应的功能:\n1.加入学生资料\t2.显示学生资料\n3.删除学生资料\t4.查找学生资料\n5.统计学生人数\t6.退出系统\n\n");
scanf_s("%d", &select);
switch (select) {
case 1:
addFile(head);
break;
case 2:
showFile(head);
break;
case 3:
printf("请输入您要删除信息的学生的学号:");
scanf_s("%d", &number);
deleteFile(head,number);
break;
case 4:
printf("请输入您要查找信息的学生的学号:");
scanf_s("%d", &number);
searchFile(head, number);
break;
case 5:
number = Filelength(head);
printf("一共有%d个学生\n", number);
break;
case 6:
clearFile(head);
return 0;
default:
printf("输入不正确,应该输入0-7之间的数。\n\n");
break;
}
}
}
链表-学生管理系统
最新推荐文章于 2024-07-13 15:11:03 发布