C语言学生信息管理系统
此系统主要通过链表实现学生信息的增删查改。
目录
1.定义结构体
定义一个结构体,里面包括学生的姓名、年龄、专业、学号、成绩,另外包括一个结构体指针。结构体指针用来存放下一个结点的地址,连接链表。
typedef struct student {
char name[20];//姓名
int age;//年龄
char sex[20] ;//性别
char major[20];//专业
char id[20];//学号
int score;//成绩
struct student *next;//结构体指针
} stu;
2.新增学生信息
通过一个for循环控制录入的学生信息个数。每新增一个学生信息都会开辟一块新空间,将信息录入,并通过尾插法接入链表。
void add(stu *head) {
system("cls");
stu *p=head;
stu *q;
int a;
printf("请输入你想新增几个学生信息:\n");
scanf("%d",&a);
int c=0;
for(int n=0; n<a; n++) {
stu *p1=(stu*)malloc(sizeof(stu));
c++;
printf("请输入第%d个学生的信息\n",c);
printf("请输入学生姓名:\n");
scanf("%s",&p1->name );
printf("请输入学生年龄:\n");
scanf("%d",&p1->age );
while(p1->age <0) { //判断年龄是否小于0
printf("请检查是否输入错误,请重新输入!\n");
scanf("%d",&p1->age );
}
printf("请输入学生性别:\n");
scanf("%s",&p1->sex );
while(strcmp(p1->sex,"男")!=0&&strcmp(p1->sex,"女")!=0 ) { //判断性别是否为男女
printf("输入格式有误,请重新输入: (输入男或女!)\n");
scanf("%s",&p1->sex );
}
printf("请输入学生专业:\n");
scanf("%s",&p1->major );
printf("请输入学生学号:\n");
scanf("%s",&p1->id );
q=head;
while(q->next !=NULL) { //判断录入的学号是否重复
q=q->next ;
while(strcmp(p1->id ,q->id)==0) {
printf("该学号已存在,请重新输入!\n");
scanf("%s",&p1->id);
}
}
printf("请输入学生成绩:\n");
scanf("%d",&p1->score );
while(p1->score < 0) { //判断成绩是否小于0
printf("请检查是否输入错误,请重新输入!\n");
scanf("%d",&p1->score );
}
p->next=p1; //尾插法
p=p->next;
p->next=NULL;
printf("添加成功!!\n");
printf("\n");
}
p->next=NULL;
printf("\n创建完毕!\n");
system("pause");
return;
}
3.查找学生信息
查找学生信息可以通过姓名、学号、性别查找,或打印出所有学生信息。
void find(stu *head) {
printf("查看所有学生信息请按1\n");
printf("按照学生姓名查找请按2\n");
printf("按照学生学号查找请按3\n");
printf("按照学生性别查找请按4\n");
printf("请输入查询模式:\n");
int i;
scanf("%d",&i);
system("cls");
switch(i) {
case 1:
whileList(head);
break;
case 2:
chazhao(head);
break;
case 3:
xuehao(head);
break;
case 4:
Xingbie(head);
break;
}
}
(1)打印所有学生信息
void whileList(stu *head) {
printf("学生信息:\n\t姓名\t年龄\t性别 \t专业\t\t学号\t\t成绩\n");
stu *p,*p1;
p=head;
p1=p->next ;
while(p1!=NULL) {
printf("%13s",p1->name );
printf("%6d",p1->age );
printf("%8s",p1->sex );
printf("%10s",p1->major );
printf("%17s",p1->id );
printf("%13d",p1->score );
printf("\n");
p1=p1->next ;
}
system("pause");
}
(2)按照姓名查找学生
通过字符串比较来找出要查询的姓名与链表中所相同的姓名,并将其打印出来。特别的,如果存在相同的姓名,则会将同名的人全部打印。
void chazhao(stu *head) {
stu *p,*p1;
p=head;
p1=p->next ;
char named[20];
printf("请输入要查找的学生的姓名:\n");
scanf("%s",&named);
int n=0;
while(p1!=NULL) {
while(strcmp(p1->name ,named)==0) {
printf("学生信息:\n\t姓名\t年龄\t性别 \t专业\t\t学号\t\t成绩\n");
printf("%13s"