赞
踩
C语言学生信息管理系统
此系统主要通过链表实现学生信息的增删查改。
目录
定义一个结构体,里面包括学生的姓名、年龄、专业、学号、成绩,另外包括一个结构体指针。结构体指针用来存放下一个结点的地址,连接链表。
- typedef struct student {
- char name[20];//姓名
- int age;//年龄
- char sex[20] ;//性别
- char major[20];//专业
- char id[20];//学号
- int score;//成绩
- struct student *next;//结构体指针
- } stu;
通过一个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;
- }
查找学生信息可以通过姓名、学号、性别查找,或打印出所有学生信息。
- 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;
- }
- }
- 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");
- }
通过字符串比较来找出要查询的姓名与链表中所相同的姓名,并将其打印出来。特别的,如果存在相同的姓名,则会将同名的人全部打印。
- 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",p1->name );
- printf("%6d",p1->age );
- printf("%8s",p1->sex );
- printf("%10s",p1->major );
- printf("%17s",p1->id );
- printf("%13d",p1->score );
- printf("\n");
- n=1;
- break;
- }
- p=p1;
- p1=p1->next ;
- }
- if(n==0) {
- printf("该学生不存在!\n请先添加学生信息!\n");
- }
- system("pause");
- return;
- }
同样也是通过字符串比较打印性别为“男”或“女”的学生。
- void Xingbie(stu *head) {
- stu *p,*p1;
- p=head;
- p1=p->next ;
- char sexed[20];
- printf("请输入要查找的学生的性别:\n");
- scanf("%s",&sexed);
- printf("学生信息:\n\t姓名\t年龄\t性别 \t专业\t\t学号\t\t成绩\n");
- while(p1!=NULL) {
- while(strcmp(p1->sex ,sexed)==0) {
- 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");
- break;
- }
- p=p1;
- p1=p1->next ;
- if(p1==NULL) {
- system("pause");
- return;
- }
- }
- }
同样也是通过字符串比较打印出相应学号的学生。
- void xuehao(stu *head) {
- stu *p,*p1;
- char id_[20];
- printf("请输入要查找的学生的学号:\n");
- scanf("%s",&id_);
- p=head;
- p1=p->next ;
- while(p1!=NULL) {
- while(strcmp(p1->id ,id_)==0) {
- printf("学生信息:\n\t姓名\t年龄\t性别 \t专业\t\t学号\t\t成绩\n");
- 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");
- system("pause");
- return;
- }
- p=p1;
- p1=p1->next ;
- }
- if(p1==NULL||strcmp(p1->id ,id_)!=0) {
- printf("该学生不存在!\n请先添加学生信息!\n");
- system("pause");
- }
- }
在链表中新增一个学生信息。使用的是头插法。
- void insert(stu*head) {
- stu *p,*p1;
- stu *q;
- p1=(stu*)malloc(sizeof(stu));
- p1->next=NULL;
- p = head;
- printf("请输入学生姓名:\n");
- scanf("%s",&p1->name );
- printf("请输入学生年龄:\n");
- scanf("%d",&p1->age );
- while(p1->age <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!=NULL) {
- while(strcmp(p1->id ,q->id)==0) {
- printf("该学号已存在,请重新输入!\n");
- scanf("%s",&p1->id);
- q=head;
- }
- q=q->next ;
- }
- printf("请输入学生成绩:\n");
- scanf("%d",&p1->score );
- while(p1->score < 0) {
- printf("请检查是否输入错误,请重新输入!\n");
- scanf("%d",&p1->score );
- }
- while(p->next!=NULL) {
- p=p->next;
- }
- p->next=p1;
- p=p1;
- printf("添加成功!\n");
- system("pause");
- }
通过冒泡排序将学生信息按照从高到低的顺序排序并打印出来。
- void Paixu(stu *head) {
- stu *p,*p1,*q;
- p=head;
- p1=head->next;
- system("cls");
- while(p->next!=NULL) { //冒泡排序
- while(p1->next!=NULL) {
- if(p->next->score<p1->next->score) {
- q=p->next;
- p->next=p1->next;
- p1->next=p1->next->next;
- p->next->next=q;
-
- } else {
- p1=p1->next;
- }
- }
- p=p->next;
- p1=p->next;
- }
- p=head->next;
- printf("按总成绩从高到低排名如下: \n");
- printf("学生信息:\n\t姓名\t年龄\t性别 \t专业\t\t学号\t\t成绩\n");
- while(p) {
- printf("%13s",p->name );
- printf("%6d",p->age );
- printf("%8s",p->sex );
- printf("%10s",p->major );
- printf("%17s",p->id );
- printf("%13d",p->score );
- printf("\n");
- p=p->next ;
- }
- system("pause");
- }
可以选择更改学生姓名、学号或者全部信息三种修改模式。
- void change(stu *head) {
-
- printf("请选择需要更改的信息:\n");
- printf("更改全部信息请按1:\n");
- printf("更改姓名请按2:\n");
- printf("更改学号请按3:\n");
- int i;
- scanf("%d",&i);
- system("cls");
- switch(i) {
- case 1:
- All(head);
- break;
- case 2:
- Name(head);
- break;
- case 3:
- Id(head);
- break;
- }
- }
在每次修改学生信息打印出该学生的信息,方便修改。
- void XiugaiDayin(stu *N) {
- printf("修改前信息为:\n");
- printf("学生信息:\n\t姓名\t年龄\t性别 \t专业\t\t学号\t\t成绩\n");
- printf("%13s",N->name );
- printf("%6d",N->age );
- printf("%8s",N->sex );
- printf("%10s",N->major );
- printf("%17s",N->id );
- printf("%13d",N->score );
- printf("\n");
- }
通过学号找出要修改的学生,并单独修改其姓名。
- void Name(stu *head) {
- char ided[20];
- printf("请输入要更改的学生的学号:\n");
- scanf("%s",ided);
- stu *p,*p1;
- p=head;
- p1=p->next ;
- while(p1!=NULL) {
- while(strcmp(p1->id ,ided)==0 ) {
- XiugaiDayin(p1);
- printf("请输入更改后的学生姓名:\n");
- scanf("%s",&p1->name );
- printf("更改成功!\n");
- system("pause");
- return;
- }
- p=p1;
- p1=p1->next ;
- }
- if(p1==NULL||strcmp(p1->id ,ided )!=0) {
- printf("没有该学生!\n");
- system("pause");
- }
- }
通过学号找出要修改的学生,并单独修改其学号。
- void Id(stu *head) {
- char ided[20];
- printf("请输入要更改的学生的学号:\n");
- scanf("%s",ided);
- stu *p,*p1;
- stu *q;
- p=head;
- p1=p->next ;
- while(p1!=NULL) {
- while(strcmp(p1->id ,ided)==0 ) {
- XiugaiDayin(p1);
- printf("请输入更改后的学生学号:\n");
- scanf("%s",&p1->id );
- printf("更改成功!\n");
- system("pause");
- return;
- }
- p=p1;
- p1=p1->next ;
- }
- if(p1==NULL||strcmp(p1->id ,ided )!=0) {
- printf("没有该学生!\n");
- system("pause");
- }
- }
通过学号找出要修改的学生,并修改其全部信息。
- void All(stu *head) {
- char ided[20];
- printf("请输入要更改的学生的学号:\n");
- scanf("%s",ided);
- stu *p,*p1;
- stu *q;
- p=head;
- p1=p->next ;
- while(p1!=NULL) {
- while(strcmp(p1->id ,ided)==0 ) {
- XiugaiDayin(p1);
- printf("请输入更改后的学生姓名:\n");
- scanf("%s",&p1->name );
- printf("请输入更改后的学生年龄:\n");
- scanf("%d",&p1->age );
- while(p1->age <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 );
- printf("请输入更改后的学生成绩:\n");
- scanf("%d",&p1->score );
- while(p1->score < 0) {
- printf("请检查是否输入错误,请重新输入!\n");
- scanf("%d",&p1->score );
- }
- printf("更改成功!\n");
- system("pause");
- return;
- }
- p=p1;
- p1=p1->next ;
- }
- if(p1==NULL||strcmp(p1->id ,ided )!=0) {
- printf("没有该学生!\n");
- system("pause");
- }
- }
通过学号找出要删除的学生信息,将其从链表中剔除,并将其所占用的空间释放掉。
- void Delete(stu *head) {
- stu *p,*p1;
- char n[20];
- printf("请输入要删除的学生的学号:\n");
- scanf("%s",&n);
- p= head;
- p1=p->next ;
- while(p1!=NULL) {
- while(strcmp(p1->id ,n)==0) {
- p->next =p1->next ;
- free(p1);
- printf("删除成功!\n");
- system("pause");
- return;
- }
- p=p1;
- p1=p->next ;
- }
- if(p1==NULL||strcmp(n,p1->id )!=0) {
- printf("没有该学生!\n");
- system("pause");
- }
-
- }
将当前链表中的学生信息保存到电脑D盘中。
- void save(stu *head) {
- FILE *fp;
- fp=fopen("D:\\学生信息.txt","w");
- stu *p=head;
- p=p->next ;
- fprintf(fp,"学生信息:\n\t姓名\t年龄\t性别\t专业 \t学号 \t成绩\n");
- while(p!=NULL) {
-
- fprintf(fp,"\t%3s %6d %6s %10s %15s %12d\n",p->name ,p->age ,p->sex ,p->major ,p->id ,p->score );
- p=p->next ;
- }
- fclose(fp);
- printf("保存成功!");
- system("pause");
- }
主函数包括控制小黑框的大小,更改背景与字体颜色,头指针与头节点的创建,打印出相应菜单,通过switch语句选择要实现的功能。
- int main() {
- system("mode concols=100 lines=30");
- system("color 3E");
- stu *head=(stu*)malloc(sizeof(stu));
- head->next =NULL;
- char a;
- while(1) {
- system("cls");
- 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* 保存学生信息请按7 *\n");
- printf("\t\t\t\t\t* 退出系统请按8 *\n");
- printf("\t\t\t\t\t**************************\n");
- scanf("%s",&a);
- switch(a) {
- case '1':
- system("cls");
- add(head);
- break;
- case '2':
- system("cls");
- find(head);
- break;
- case '3':
- system("cls");
- insert(head);
- break;
- case '4':
- system("cls");
- Paixu(head);
- break;
- case '5':
- system("cls");
- change(head);
- break;
- case '6':
- system("cls");
- Delete(head);
- break;
- case '7':
- system("cls");
- save(head);
- break;
- case '8':
- exit(0);
- break;
- default :
- system("cls");
- printf("输入方式错误,请重新输入!\n");
- system("pause");
- break;
- }
- }
- return 0;
- }
1.添加学生信息
2.查看学生信息
3.按照成绩排序
4.更改学生信息
5.删除学生
篇幅有限不过多演示!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。