C语言课程设计——学生信息管理系统
学生信息管理
(1)问题描述
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
- 系统以菜单方式工作
- 学生信息录入功能(学生信息用文件保存)---输入
- 学生信息浏览功能——输出
- 查询、排序功能——算法
1、按学号查询
2、按姓名查询
- 学生信息的删除与修改(可选项)
(2)功能要求
- 界面简单明了;
- 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入;
- 最好用链表的方式实现。
(3)算法分析
首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:是定义一个数组来存储,还是定义一个链表呢?在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。
效果展示:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>typedef struct Student //学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。
{int number;char name[20];int age;char sex[6];char birthday[12];char address[20];char phone[12];char email[20];struct Student *next;
} Student;void menu();//函数声明
Student *Read();
void Write(Student *head);
void Scan(Student *current);
Student *Sort(Student *head);
Student *Input();
Student *Delete(Student *head);
Student *Add(Student *head);
void Show(Student *head);
Student *Find(Student *head);
Student *Find(Student *head);
Student *Change(Student *headI);Student *Read()//从文件读出链表的函数
{Student *head=NULL,*pre=NULL,*current=NULL;FILE *fp;if(!(fp=fopen("date.txt","rb"))) //打开文件{printf("此文件不可打开!");system("pause");return head;}char ch=fgetc(fp);rewind(fp);//此处很重要,如果丢失了就会出错 ,因为上一条语句后fp不是指向文件开头了if(ch!=EOF) //判断:判断文件是否为空,解决文件为空的情况{head=pre=current=(Student *)malloc(sizeof(Student));//创建链表fread(current,sizeof(Student),1,fp);while(current->next){pre=current;current=(Student *)malloc(sizeof(Student));pre->next=current;fread(current,sizeof(Student),1,fp);}}else{printf("此文件为空,请先输入数据");//提示system("pause");}fclose(fp);//关闭文件menu();//刷新界面return head;
}void Write(Student *head) //写入数据函数:把数据写入到磁盘中
{FILE *fp;if(!(fp=fopen("date.txt","wb"))) //打开并准备重写文件{printf("此文件不可打开!");system("pause");return;}while(head) //写入数据{fwrite(head,sizeof(Student),1,fp);head=head->next;}fclose(fp);
}void Scan(Student *current)//输入数据,在其他地方可调用
{printf("姓名: ");//namescanf("%s",¤t->name);printf("年龄: ");//agescanf("%d",¤t->age);while((current->age > 120)||(current->age < 0))//判断是否为合法输入{printf("输入错误,重新输入年龄:");scanf("%d",¤t->age);}printf("性别: ");//sexscanf("%s",¤t->sex);printf("生日: ");//birthdayscanf("%s",¤t->birthday);printf("地址: ");//addressscanf("%s",¤t->address);printf("电话: ");//phonescanf("%s",¤t->phone);printf("邮箱: ");//emailscanf("%s",¤t->email);
}Student *Input()//信息录入与保存函数
{puts("输入学号为0结束");//学号输0表示结束Student *head=NULL,*pre=NULL,*current=NULL;head=pre=current=(Student *)malloc(sizeof(Student));printf("学号: ");scanf("%d",¤t->number);if(current->number) Scan(current);else head=NULL;while(current->number){pre=current;current=(Student *)malloc(sizeof(Student));printf("学号: ");scanf("%d",¤t->number);if(!current->number){printf("---输入完成---");system("pause");break;}Scan(current);pre->next=current;}pre->next=NULL;head=Sort(head);//排序Write(head);//重写return head;
}Student *Sort(Student *head)//排序函数
{if(head) //判断{Student *pre,*current,*next;pre=current=head;next=head->next;int count=0;while(head) //计算一共有多少条数据{head=head->next;count++;}head=current;//头返回起点int i,j,flag;for(i=count-1; i>0; i--) //冒泡排序法实现{flag=1;for(j=0; j<i; j++){if(current->number>next->number){current->next=next->next;next->next=current;if(j) //不是首节点pre->next=next;elsehead=next;}current=current->next;next=next->next;if(j)pre=pre->next;flag=0;}pre=current=head;next=head->next;if(flag)break;}}else{printf("此文件为空,请先输入数据");//提示system("pause");}return head;
}Student *Delete(Student *head)//删除数据
{if(head) //判断 ,当文件夹为空(链表为空的时候){int num,j=1;puts("请输入您想要删除的学生的学号");scanf("%d",&num);Student *pre=head,*current=head;int count=1;while(current->number!=num) //寻找要删除的数据{count++;pre=current;current=current->next;if(!current){j=0;break;}}if(j) //准备删除{if(count==1){head=head->next;free(pre);}else{pre->next=current->next;free(current);}Write(head);printf("\n");printf("---删除成功!---\n");printf("\n");printf(">>>现在的学生信息为:\n");Show(head);}else{printf("不存在此人!");system("pause");}}else{printf("此文件为空,请先输入数据");//空文件system("pause");}return head;
}Student *Add(Student *head)//添加数据:按排序插入
{Student *pre=head,*current=head;Student *p=(Student*)malloc(sizeof(Student));printf("学号:");scanf("%d",&p->number);Scan(p);if(head) //判断,防止文件夹为空{if( p->number <= head->number ){p->next=head;head=p;}else{current=current->next;while(current){if( p->number <= current->number ){pre->next=p;p->next=current;break;}else{pre=current;current=current->next;}}if(!current){pre->next=p;p->next=NULL;}}}else{head=p;head->next=NULL;}Write(head);printf("---添加成功!---\n");printf("\n");printf(">>>现在的学生信息为:\n");Show(head);return head;//如果插入在第一个以前,则head变了,于是需要返回head
}void Show(Student *head) //浏览数据
{int n=1;if(head){printf("*************************************************************************************************************************\n");printf("║序号 ║║ 学号 ║ 姓名 ║ 年龄 ║ 性别 ║ 出生年月 ║║ 地址 ║║ 电话 ║║ 邮箱 ║\n");while(head){printf(" %d\t %d\t %s\t %d\t %s\t %s\t %s\t %s\t %s\n ",n,head->number,head->name,head->age,head->sex,head->birthday,head->address,head->phone,head->email);head=head->next;n++;}printf("*************************************************************************************************************************\n");}elseprintf("此文件为空,请先输入数据");system("pause");
}void findmenu()
{printf("\n\n\n");printf("\t\t\t☆☆学生信息查找☆☆\n");printf("\t\t---------------------------------------\n");printf("\t\t\t 1 按学号查找 \n");printf("\t\t\t 2 按姓名查找 \n");printf("\t\t---------------------------------------\n");printf("\t\t\t请输入菜单选项1-2:");
}Student *Ffind(Student *head)//查询函数
{int k=1;if(head) //判断{system("cls");findmenu();int judge;scanf("%d",&judge);Student *p1;p1=head;printf("\t\t\t 输入你想查找的人:");if(judge==1){int num;scanf("%d",&num);while(p1->number!=num){p1=p1->next;if(!p1){puts("此人不存在!\n");k=0;break;}}}else{char name[20];scanf("%s",&name);while(strcmp(name,p1->name)){p1=p1->next;if(!p1){puts("此人不存在!\n");k=0;break;}}}if(k){printf("\n");printf("║ 学号 ║ 姓名 ║ 年龄 ║ 性别 ║ 出生年月 ║║ 地址 ║║ 电话 ║║ 邮箱 ║\n");printf(" %d\t %s\t %d\t %s\t %s\t %s\t %s\t %s\n ",p1->number,p1->name,p1->age,p1->sex,p1->birthday,p1->address,p1->phone,p1->email);}}else{k=0;printf("此文件为空,请先输入数据");}system("pause");if(k)return head;elsereturn NULL;
}Student *Find(Student *head)//查找函数(用于修改函数中)界面比Ffind函数简洁
{int k=1;if(head) //判断{printf("---请先查找要修改的人---\n");printf(">>>按学号查找请按1\t按姓名查找请按2\n");//选择根据名字还是根据学号查询int judge;scanf("%d",&judge);Student *p1;p1=head;printf("输入你想修改的人:");if(judge==1){int num;scanf("%d",&num);while(head->number!=num){head=head->next;if(!head){puts("此人不存在!\n");k=0;break;}}}else{char name[20];scanf("%s",&name);while(strcmp(name,head->name)){head=head->next;if(!head){puts("此人不存在!\n");k=0;break;}}}}else{k=0;puts("此文件为空!");}system("pause");if(k)return head;elsereturn NULL;
}void xiugaimenu()
{printf("\n\n\n");printf("\t\t\t☆☆学生信息修改☆☆\n");printf("\t\t---------------------------------------\n");printf("\t\t\t 1 修改学号 \n");printf("\t\t\t 2 修改姓名 \n");printf("\t\t\t 3 修改年龄 \n");printf("\t\t\t 4 修改性别 \n");printf("\t\t\t 5 修改生日 \n");printf("\t\t\t 6 修改地址 \n");printf("\t\t\t 7 修改电话 \n");printf("\t\t\t 8 修改邮箱 \n");printf("\t\t---------------------------------------\n");printf("\t\t\t请输入菜单选项1-8:");
}Student *Change(Student *headI)//修改信息
{int n;Student *head=Find(headI);//由于之前已经定义过find函数,故此处不需要再搜索,直接调用find函数即可getchar();system("cls");xiugaimenu();if(head) //判断{scanf("%d",&n);switch(n){case 1:{printf("\t\t\t 学号修改为:");scanf("%d",&head->number);printf("\t\t\t 修改成功!");//system("pause");break;}case 2:{printf("\t\t\t 姓名修改为:");scanf("%s",&head->name);printf("\t\t\t 修改成功!");system("pause");break;}case 3:{printf("\t\t\t 年龄修改为:");scanf("%d",&head->age);printf("\t\t\t 修改成功!");system("pause");break;}case 4:{printf("\t\t\t 性别修改为:");scanf("%s",&head->sex);printf("\t\t\t 修改成功!");system("pause");break;}case 5:{printf("\t\t\t 生日修改为:");scanf("%s",&head->birthday);printf("\t\t\t 修改成功!");break;}case 6:{printf("\t\t\t 地址修改为:");scanf("%s",&head->address);printf("\t\t\t 修改成功!");system("pause");break;}case 7:{printf("\t\t\t 电话修改为:");scanf("%s",&head->phone);printf("\t\t\t 修改成功!");break;}case 8:{printf("\t\t\t 邮箱修改为:");scanf("%s",&head->email);printf("\t\t\t 修改成功!");system("pause");break;}default:printf("选项错误!按任意键继续!");getchar();system("cls");}head=Sort(headI);Write(headI);}return headI;
}void menu()//主菜单
{system("cls");//清空屏幕printf("\t -----------------------------------------------------\n");printf("\t \n");printf("\t ☆☆☆ 欢迎使用学生信息管理系统 ☆☆☆ ");printf("\t \n");printf("\t -----------------------------------------------------\n");printf("\t | 1 → 录入学生信息 |\n");printf("\t | 2 → 浏览学生信息 |\n");printf("\t | 3 → 查找学生信息 |\n");printf("\t | 4 → 修改学生信息 |\n");printf("\t | 5 → 添加学生信息 |\n");printf("\t | 6 → 删除学生信息 |\n");printf("\t | 7 → 退出管理系统 |\n");printf("\t -----------------------------------------------------\n");printf("\t\t\t\t\t\t");system("date/t");printf("\t\t\t\t\t\t ");system("time/t");printf("\t请选择菜单选项1-7:");
}//主函数
int main()
{system("title 学生管理系统");system("color F4");system("mode 130,100");menu();//初始化页面Student *head=NULL;//创建临时链表head=Read();//每次先从文件读出链表int n;while(1){scanf("%d",&n);switch(n){case 1:system("cls");head=Input();break;case 2:system("cls");Show(head);break;case 3:system("cls");Ffind(head);break;case 4:system("cls");head=Change(head);break;case 5:system("cls");head=Add(head);break;case 6:system("cls");head=Delete(head);break;case 7:printf("\n\t\t★★★感谢您的使用,期待下一次相遇★★★\n");exit(0);break;}menu();}return 0;
}
C语言课程设计——学生信息管理系统相关推荐
- C语言课程信息管理系统课程设计,c语言课程设计学生信息管理系统.doc
c语言课程设计学生信息管理系统 课程设计报告 课程名称: 高级语言程序设计课程设计 姓 名: 汤璞君 班级学号: BX1209 121003410937 指导教师: 吉顺如 完成日期: 2013.6. ...
- c语言编制学生课程信息管理系统,C语言课程设计-学生信息管理系统.doc
- III -- III - 中国海洋大学 青岛学院 C语言课程设计报告书 题 目 学生信息管理系统 学生姓名 指导教师 学 院 专业班级 组内分工 姓名 主要任务 占系统比例 学生信息的查看,主函数 ...
- c语言课程设计学生信息管理系统
1. 学生基本信息(包括姓名.性别.学号.班级.成绩等): 2. 新增.删除.修改一名学生信息: 3. 查询学生信息: 4. 可以实现新增.删除.修改学生成绩: 5. 按成绩排序. 6.可保存信息,下 ...
- C语言课程设计-学生信息管理系统
目录 一.开发环境 二.项目需求分析 2.1项目背景及简介 2.2功能需求
- c语言课程设计宠物店,c语言课程设计-宠物店信息管理系统.doc
c语言课程设计-宠物店信息管理系统 合肥学院 计算机科学与技术系 课程设计报告 2012-2013学年第二学期 课程面向过程综合设计课程设计名称宠物(小动物)店信息管理系统 学生姓名宋俊 学号 专业班 ...
- c语言课程设计查找分数与删除元素,c语言课程设计学生成绩管理系统
<c语言课程设计学生成绩管理系统>由会员分享,可在线阅读,更多相关<c语言课程设计学生成绩管理系统(31页珍藏版)>请在人人文库网上搜索. 1.河南理工大学计算机科学与技术学院 ...
- C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码
<C语言课程设计学生成绩管理系统+源码>由会员分享,可在线阅读,更多相关<C语言课程设计学生成绩管理系统+源码(25页珍藏版)>请在人人文库网上搜索. 1.简易教学管理系统的设 ...
- C语言学生成绩管理设计总结,C语言课程设计学生成绩管理系统个人总结
C语言课程设计学生成绩管理系统个人总结 C语言课程设计--学生成绩管理系统 个人心得体会 (徐州工程学院 14计嵌1班 07组 张凯) 这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但 ...
- C语言 课程设计——职工信息管理系统
C语言 课程设计--职工信息管理系统 提示:该课程设计是本人第一次制作,有诸多不足之处,希望王对你有些许帮助!!! 文章目录 C语言 课程设计--职工信息管理系统 前言 一.首先定义一个结构体数组 二 ...
最新文章
- 经常下载的朋友注意了,教你怎样硬盘零伤害(从论坛上拷下来收藏的)
- 对于DataSet中的问题真是郁闷啊
- 【Linux】一步一步学Linux——rename命令(36)
- RuoYi-Cloud 部署篇_03(windows环境 mysql版本)
- 深空数据(LRO .etc)处理软件 isis3 + asp 安装流程(基于 ubuntu 18.04)
- JT/T808校验码计算(按字节异或求和)
- 制造行业mes使用说明书_mes系统操作手册完整版
- python必背100源代码下载-100行Python代码实现一款高精度免费OCR工具
- 抖音爆火李峋同款爱心代码,简单附带教程,还有烟花代码,手残党也能学会!!
- vtop工具使用分析
- 微信公众平台开发(六) 翻译功能开发
- 解析wiki数据(带标点,保留格式)
- cout的格式控制——关于cout.width()和cout.fill()
- 神通广大的WiFi劫持工具:Mana
- Flink(八)Flink的Parallelism并行度
- 华为国际快递被转运至美国 联邦快递致歉:误送
- 【NOIP 2017 提高组 DAY1 T1】小凯的疑惑
- 被动收入:回归原始且安全的两种赚取方法
- 北大光华本科女强人的超长综合面经
- 偏导,方向导数以及梯度的理解