开发环境:Linux
开发语言:C
相关文件下载:
码云:传送门
GitHub:传送门
程序主界面:
相关功能:参考码云中的文档
/*************************************************************************************************************
校长 老师的登录信息存储在对应的txt文件中
校长的账号是admin 密码是123,某教师账号1,密码1。某学生账号1,密码123。
*************************************************************************************************************/
文件:
main.c ,student.c ,student.h ,teacher.c , teacher.h , admin.c , admin.h, tools.c , tools.h, struct.h, sams.c, sams.h, stu.txt, tea.txt , admin.txt, project_create.sh, Makefile
结构:
- 主界面:“1.学生登录”“2.教师登录”“3.校长登录”“0.退出系统”,4个选项进行跳转。(main.c)
2.1 选择1,跳转“学生登录界面”,输入学号及默认密码(三次错误及锁定此学号,登录成功后即进入“修改密码子界面”)
2.2 选择2,跳转“教师登录界面”,输入工号及默认密码(三次错误及锁定此工号,登录成功后即进入“修改密码子界面”)
2.3 选择3,跳转“校长登录界面”,输入学号及默认密码(登录成功后即进入“修改密码子界面”)
2.4 选择0,关闭程序。
3.1 成功登录及修改密码后,跳转“学生功能界面”(student.c, student.h)
1、第一次登录强制修改密码。
2、查询成绩
排名 不显示姓名和学号。
平均分
最高分
最低分
3、修改密码
4、查看个人信息
5、三次密码错误锁定帐号,由教师解锁
0、返回上一级
3.2 成功登录及修改密码后,跳转“教师功能界面”(teacher.c ,teacher.h)
1、第一次登录强制修改密码。
2、添加学生(学生的学号自动生成)
单个添加
批量导入
3、删除学生
输入两人次学号确定
删除的学生要记录保存在已退学的文件中
4、查找学生
按姓名查找
按学号查找
5、修改学生信息
修改学生基础信息
修改学生成绩
6、录入学生成绩
单个录入
批量导入
7、重置学生密码
8、显示所有在校学生信息
9、显示所有退出学生信息
10、三次密码错误锁定帐号,由校长解锁
0、返回上一级
3.3 成功登录及修改密码后,跳转“校长功能界面”(admin.c ,admin.h)
1、第一次登录强制修改密码。
2、能重置自己的密码
3、能重置教师密码
4、添加教师
5、删除教师
6、显示所有在职教师
7、显示所有离职教师
0、返回上一级
效果展示:
我给Windows单独写了个。
补上 stu.txt, tea.txt , admin.txt。编译运行,数据参考结构体。
main.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 #include <conio.h> 5 //#include "getch.h" 6 #include <string.h> 7 #include <stddef.h> 8 9 #define pf printf 10 #define sf scanf 11 #define MAX_STU 100 12 #define MAX_TEA 50 13 14 typedef struct Student 15 { 16 char name[20]; 17 char sex; 18 char id[20]; 19 char passwd[20]; 20 short chinese; 21 short english; 22 short math; 23 short time; 24 short birth; 25 short exist; 26 }Student; 27 28 typedef struct Teacher 29 { 30 char name[20]; 31 char sex; 32 char id[20]; 33 char passwd[20]; 34 short time; 35 short birth; 36 short exist; 37 }Teacher; 38 39 typedef struct Admin 40 { 41 char id[20]; 42 char passwd[20]; 43 short birth; 44 }Admin; 45 46 // 声明全局变量 47 Student* STU; 48 Teacher* TEA; 49 Admin* ADM; 50 51 // 下标 52 int temp = 0; 53 int pos = 0; 54 int i = 0; 55 56 // 系统初始化 57 void sams_init(void); 58 // 系统开始运行 59 void sams_start(void); 60 // 系统结束 61 void sams_exit(void); 62 63 // 管理子系统菜单 64 void admin_menu(void); 65 // 管理员添加老师 66 void admin_add_tea(void); 67 // 管理员删除老师 68 void admin_del_tea(void); 69 // 管理员重置老师 70 void admin_reset_tea(void); 71 // 管理员显示在职教师列表 72 void admin_list_tea(void); 73 // 管理员显示离职教师列表 74 void admin_list_ubtea(void); 75 // 管理员修改密码 76 void admin_change_pw(void); 77 // 管理员登录 78 bool admin_login(void); 79 // 运行管理员子系统 80 void admin_start(void); 81 82 // 学生子系统菜单 83 void student_menu(void); 84 // 学生查询成绩 85 void student_find_score(void); 86 // 学生查询成绩 87 void student_find_score(void); 88 // 学生修改密码 89 void student_ch_pw(void); 90 // 学生查询个人信息 91 void student_find_info(void); 92 // 学生登录 93 int student_login(void); 94 // 运行学生子系统 95 void student_start(void); 96 97 // 老师子系统菜单 98 void teacher_menu(void); 99 // 老师添加学生 100 void teacher_add_stu(void); 101 // 老师删除学生 102 void teacher_del_stu(void); 103 // 老师查询学生 104 void teacher_find_stu(void); 105 // 老师修改学生信息 106 void teacher_ch_stu_info(void); 107 // 老师添加学生成绩 108 void teacher_add_stu_score(void); 109 // 老师重置学生密码 110 void teacher_reset_stu_pw(void); 111 // 老师显示在校学生列表 112 void teacher_list_stu(void); 113 // 老师显示退学学生列表 114 void teacher_list_ubstu(void); 115 // 老师修改密码 116 void teacher_ch_pw(void); 117 // 老师登录 118 int teacher_login(void); 119 // 老师登录 120 int teacher_login(void); 121 // 运行老师子系统 122 void teacher_start(void); 123 124 // 获取字符串 125 char* get_str(char* str,size_t len); 126 // 清理缓冲区 127 void clear_stdin(void); 128 // 获取性别 129 char get_sex(void); 130 // 获取键盘指令 131 char get_cmd(char start,char end); 132 // 获取密码 133 char* get_pw(char* passwd,bool is_show,size_t size); 134 135 // 主函数 136 int main() 137 { 138 sams_init(); 139 140 sams_start(); 141 142 sams_exit(); 143 } 144 145 // 主菜单 146 void sams_menu(void) 147 { 148 pf("***欢迎使用指针学生成绩管理系统*** "); 149 pf("1、管理员子系统 "); 150 pf("2、教师子系统 "); 151 pf("3、学生子系统 "); 152 pf("4、退出系统 "); 153 pf("----------------------------- "); 154 } 155 156 // 系统初始化 157 void sams_init(void) 158 { 159 // 申请堆内存、加载数据 160 STU = calloc(MAX_STU,sizeof(Student)); 161 TEA = calloc(MAX_TEA,sizeof(Teacher)); 162 ADM = calloc(1,sizeof(Admin)); 163 pf("系统初始化... "); 164 165 FILE* afrp = fopen("admin.txt","r"); 166 int num = 0; 167 num = fscanf(afrp,"%s %s %hd",ADM[0].id,ADM[0].passwd,&ADM[0].birth); 168 fclose(afrp); 169 170 FILE* sfrp = fopen("stu.txt","r"); 171 for(i=0; i<100; i++) 172 { 173 int num = 0; 174 num = fscanf(sfrp,"%s %c %s %s %hd %hd %hd %hd %hd %hd",STU[i].name,&STU[i].sex,STU[i].id,STU[i].passwd,&STU[i].chinese,&STU[i].english,&STU[i].math,&STU[i].time,&STU[i].birth,&STU[i].exist); 175 } 176 fclose(sfrp); 177 178 FILE* tfrp = fopen("tea.txt","r"); 179 for(i=0; i<50; i++) 180 { 181 int num = 0; 182 num = fscanf(tfrp,"%s %c %s %s %hd %hd %hd",TEA[i].name,&TEA[i].sex,TEA[i].id,TEA[i].passwd,&TEA[i].time,&TEA[i].birth,&TEA[i].exist); 183 } 184 fclose(tfrp); 185 } 186 187 // 系统开始运行 188 void sams_start(void) 189 { 190 // 进入系统的业务流程控制 191 pf("系统开始运行... "); 192 while(true) 193 { 194 sams_menu(); 195 switch(get_cmd('1','4')) 196 { 197 case '1': admin_start(); break; 198 case '2': teacher_start(); break; 199 case '3': student_start(); break; 200 case '4': return; 201 } 202 } 203 } 204 205 // 系统结束 206 void sams_exit(void) 207 { 208 FILE* afwp = fopen("admin.txt","w"); 209 int num = 0; 210 num = fprintf(afwp,"%s %s %hd",ADM[0].id,ADM[0].passwd,ADM[0].birth); 211 fclose(afwp); 212 213 FILE* sfwp = fopen("stu.txt","w"); 214 for(i=0; i<100; i++) 215 { 216 int num = 0; 217 if(STU[i].sex != 0) 218 { 219 num = fprintf(sfwp,"%s %c %s %s %hd %hd %hd %hd %hd %hd ",STU[i].name,STU[i].sex,STU[i].id,STU[i].passwd,STU[i].chinese,STU[i].english,STU[i].math,STU[i].time,STU[i].birth,STU[i].exist); 220 } 221 } 222 fclose(sfwp); 223 224 FILE* tfwp = fopen("tea.txt","w"); 225 for(i=0; i<50; i++) 226 { 227 int num = 0; 228 if(TEA[i].sex != 0) 229 { 230 num = fprintf(tfwp,"%s %c %s %s %hd %hd %hd ",TEA[i].name,TEA[i].sex,TEA[i].id,TEA[i].passwd,TEA[i].time,TEA[i].birth,TEA[i].exist); 231 } 232 } 233 fclose(tfwp); 234 // 释放内存、保存数据 235 free(STU); 236 free(TEA); 237 free(ADM); 238 pf("系统退出... "); 239 } 240 241 // 管理子系统菜单 242 void admin_menu(void) 243 { 244 pf(" 进入管理子系统... "); 245 pf("1、添加教师 "); 246 pf("2、删除教师 "); 247 pf("3、重置并解锁教师密码 "); 248 pf("4、显示在职教师 "); 249 pf("5、显示已离职教师 "); 250 pf("6、修改自己密码 "); 251 pf("7、返回上一级 "); 252 pf("----------------- "); 253 } 254 255 // 管理员添加老师 256 void admin_add_tea(void) 257 { 258 pf("添加教师 "); 259 char Cteacher_name[20]; 260 char Cteacher_sex; 261 char Cteacher_id[20]; 262 char Cteacher_pw[20]; 263 pf("请输入教师姓名:"); 264 get_str(Cteacher_name,20); 265 pf("请输入教师性别:"); 266 Cteacher_sex = get_sex(); 267 pf("请输入教师工号:"); 268 get_str(Cteacher_id,20); 269 pf("请输入教师密码:"); 270 get_str(Cteacher_pw,20); 271 int pos = -1; //插入的位置 272 pf("id:%s。 ",TEA[0].id); 273 for(i=0; i<50; i++) 274 { 275 if(TEA[i].sex == '