学生信息管理系统——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命令查看当前系统中运行的进程信息