前言
这是第一次合作完成的较大的项目, 运用所学的所有C语言知识,在Linux环境下进行学生管理系统的合作编程。
前期准备
分析系统结构、属性、功能
整体功能
学生能够登陆系统查询语文、数学、英语三科成绩,及三科的平均分、总分、排名。
教师能够管理学生、录入学生考试成绩。
管理员能够管理教师,超级管理员有且只有一个,只为管理普通管理员。
除超级管理员外,所有用户连续登陆三次帐号被锁定,需要上级用户才能解锁。
除超级管理员外,所有用户id要求有序且唯一。
除超级管理员外,所有用户登陆必须修改密码。
学生
属性 | 功能 |
---|
学号 | 登陆显示学生信息 |
密码 | 查看单科成绩排名 |
姓名 | 查看总分成绩排名 |
性别 | 修改登陆密码 |
年龄 | |
语文 | |
数学 | |
平均 | |
总分 | |
排名 | |
教师
属性 | 功能 |
---|
工号 | 添加学生 |
密码 | 删除学生 |
姓名 | 修改学生基本信息 |
性别 | 重置学生密码 |
年龄 | 解锁学生账号 |
工龄 | 查询学生基本信息 |
| 显示在读学生 |
| 显示退学学生 |
| 录入学生成绩 |
| 修改学生成绩 |
| 根据姓名学号查询成绩 |
| 按各科总分排序 |
| 修改密码 |
管理员
属性 | 功能 |
---|
账号 | 添加教师 |
密码 | 删除教师 |
| 修改教师基本信息 |
| 重置教师密码 |
| 解锁教师账号 |
| 查询教师基本信息 |
| 显示在职教师 |
| 显示离职教师 |
| 修改密码 |
超级管理员
属性 | 功能 |
---|
账号 | 添加管理员 |
密码 | 删除管理员 |
| 重置管理员密码 |
| 解锁管理员账号 |
| 显示管理员 |
定义结构体、函数
学生
typedef struct Student
{
char student_id[20];
char student_password[20];
char student_name[20];
char student_sex;
int student_age;
float student_chinese;
int student_chinese_seqencing;
float student_math;
int student_math_seqencing;
float student_english;
int student_english_seqencing;
float student_sum;
int student_sum_seqencing;
int student_enter_time;
int enter_time;
}Student;
bool is_right_student ( char* ,char* );
bool is_time_student_right(char* );
bool is_inschool_student(char* str1);
void student_system(char* );
void init_show(void );
void student_show_time(char* );
void change_password(char* str);
void first_change_password(char* str ,int* num );
void student_enter_password(char* user_id,char* user_password);
教师
typedef struct Teacher
{
char id[20];
char password[20];
char name[20];
char sex;
int birthyear;
int inyear;
int lock;
int del;
int firstload;
}Teacher;
void test_teacher1(char *user_id);
void test_teacher2(char *user_id);
void teacher_choice_function_two(void);
void teacher_choice_function_three(void);
void exit_teacher(void);
void change_self_password(char *str);
void chinese_seqencing(void);
void math_seqencing(void);
void english_seqencing(void);
void sum_seqencing(void);
void student_chinese_seqencing_show(void);
void student_math_seqencing_show(void);
void student_english_seqencing_show(void);
void student_sum_seqencing_show(void);
int teacher_choice_function_one(char *user_id);
管理员
typedef struct Manager
{
char id[11];
char password[11];
int lock;
int del;
int firstload;
}Manager;
void chose_manager(char*);
void add_teacher(void);
void del_teacher(void);
void change_teacher(void);
void reset_teacher(void);
void ulock_teacher(void);
void find_teacher(void);
void on_job(void);
void leave_job(void);
void change_manapass(char* );
void first_change_manapass(char* id);
超级管理员
#define SUID "xxxx"
#define SUPASS "test"
void chose_sumanager(void);
void add_manager(void);
void del_manager(void);
void reset_manager(void);
void ulock_manager(void);
void show_manager(void);
中期编写
较难解决问题
- 输入的判定,字符串处理不当会影响储存的信息。
- 以文件形式储存数据。
- 未能在清理输入输出缓冲区的位置清理,造成输入与显示的问题。
后期整合
较难解决问题
- 共用功能的函数名未统一,造成合并处理麻烦。
- 没用版本控制工具代码整理麻烦。
结语
通过这次的合作编程,学习到了一些合作的方法,也发现了一些问题。对于程序编写前的准备,需要在开始前就把程序中需要的所有基础功能决定好,决定好文件名,结构体名,函数名,全局变量名,以免合并时产生不必要的麻烦。中期编写时,每经过一段时间或一个功能完成后,进行讨论,了解全员的进程。后期合并时,要留接口给上级的函数调用。