学生信息管理系统——c实现
为了给我个人博客(www.gaoyuelong.cn)增加一点价值,我打算写一些小的管理程序或项目放在上面。同时也复习一下之前学的。花了大概三个晚上的时间把之前c语言课设的内容写了一遍。
第一个晚上搭了一下简单的框架,如各个模块函数,菜单显示,主函数与其之间的调用关系。第二个晚上是对功能函数的实现。第三个晚上对其优化。当然,现在就我发现的还有一些问题,是使用上的不方便,但不影响整体使用。就这样吧。
源码放在了github上:
https://github.com/GYueLong/material/tree/master/c
下面简单介绍一下,顺便整理一下遇到的问题。
用链表实现,每个结点存放学生信息:
typedef struct StudentMessage//学生信息结点 { char name[20]; char gnder[20]; int id; //学号 char college[20]; //学院 char major[20]; //专业 char classname[20]; //班级 char birthday[20]; //出生年月 int AdmissionTime; //入学时间 char DrivingRange[20]; //乘车区间 struct StudentMessage *next; //链表 }Stu;
这是主函数,程序入口。我一直觉得这个模板很好用。
void main() { int no = 0;//功能选项 while (1) { system("cls");//清屏 MainMenu();//菜单显示 printf("请输入功能选项:\n"); scanf("%d",&no); switch (no) { case 0:AllStudentMessage();break; ... case 9:freeList(); return; default:printf("选择错误\n"); } system("pause"); } return; }
模块函数
学生信息及功能
学生证信息:姓名、性别、学号、学院、专业、班级、出生年月、入学时间、乘车区间 功能: 添加学生信息(在键盘输入) 查询学生信息(给定学号,显示该学生的学生证信息) 查询班级所有学生信息(给定班号,显示该班所有学生的学生信息) 修改学生信息(给定学号,修改该学生的学生证信息) 删除学生信息(给定学号,删除该学生的学生证信息) 统计班级人数、男女比例 学生信息从文件中读入 学生信息写入文件中
程序运行界面:
写的过程中给我最大的感受就是一个东西一旦熟悉了,知道了他的原理,运用起来会很快。但是大一那会看到这些真是头大。很长时间没用过指针链表了,在写的过程中也遇到了一些问题。
- 因为我用的环境是vs2015,在vs2015以及更高版本中认为scanf是一个不安全的函数,因此不支持使用,但如果非要用的话,可以更改设置,也可以在代码的顶行加上一句代码#pragma warning(disable:4996);这样就能正常使用scanf函数了。
- 在c语言中想要表示字符串时,用的是字符数组,这里在对班级名判断时要用strcmp函数。例如
(strcmp(p->classname,ClassNo)==0)
而不要用if (p->classname == ClassNo)
。我曾在调试过程中眼真真看着他数组里面内容都一样但是通不过。 - 还有一个就是关于结构体成员初始化问题
struct date { int year=0; };
似乎这种方法并不奏效
因为书上是这么写的
struct date { int year; }gao={2019};
大概就是这么多,记住一定要多动手,动手你才会发现你根本不会这个东西。
linux命令:ps命令查看当前系统中运行的进程信息