【C语言程序设计】学生信息管理系统

Love The Way You Lie 2023-09-27 18:54 153阅读 0赞

目录

  • 一、实验任务
  • 二、实验代码
  • 三、运行效果

一、实验任务

学生信息管理系统设计

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:

1、系统以菜单方式工作

2、学生信息录入功能(学生信息用文件保存)--输入

3、学生信息浏览功能--输出

4、学生信息查询功能--按学号查询、按姓名查询、

5、学生信息的删除与修改(可选项)

要求:使用文件方式存储数据。


二、实验代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX_SIZE 1000 // 学生信息数组的最大长度
  5. #define FILE_NAME "students.txt" // 学生信息文件名
  6. // 学生信息结构体
  7. typedef struct {
  8. char id[20]; // 学号
  9. char name[20]; // 姓名
  10. int age; // 年龄
  11. char gender[10]; // 性别
  12. char birth[20]; // 出生年月
  13. char address[100]; // 地址
  14. char phone[20]; // 电话
  15. char email[50]; // 邮箱
  16. } Student;
  17. // 学生信息数组和学生信息数量
  18. Student students[MAX_SIZE];
  19. int count = 0;
  20. // 函数声明
  21. void displayMenu();
  22. void addStudent();
  23. void viewStudents();
  24. void searchStudent();
  25. void deleteStudent();
  26. void modifyStudent();
  27. void saveToFile();
  28. void readFromFile();
  29. int main() {
  30. int choice;
  31. readFromFile(); // 从文件中读取学生信息
  32. do {
  33. displayMenu(); // 显示菜单
  34. scanf("%d", &choice);
  35. switch (choice) {
  36. case 1:
  37. addStudent();
  38. break;
  39. case 2:
  40. viewStudents();
  41. break;
  42. case 3:
  43. searchStudent();
  44. break;
  45. case 4:
  46. deleteStudent();
  47. break;
  48. case 5:
  49. modifyStudent();
  50. break;
  51. case 6:
  52. saveToFile();
  53. printf("保存成功\n");
  54. break;
  55. case 7:
  56. printf("退出程序\n");
  57. break;
  58. default:
  59. printf("请输入正确的选项\n");
  60. }
  61. } while (choice != 7);
  62. return 0;
  63. }
  64. // 显示菜单
  65. void displayMenu() {
  66. printf("\n学生信息管理系统\n");
  67. printf("-----------------\n");
  68. printf("1. 添加学生信息\n");
  69. printf("2. 浏览学生信息\n");
  70. printf("3. 查询学生信息\n");
  71. printf("4. 删除学生信息\n");
  72. printf("5. 修改学生信息\n");
  73. printf("6. 保存到文件\n");
  74. printf("7. 退出程序\n");
  75. printf("请输入选项:");
  76. }
  77. // 添加学生信息
  78. void addStudent() {
  79. Student student;
  80. printf("\n请输入学生信息:\n");
  81. printf("学号:");
  82. scanf("%s", student.id);
  83. for (int i = 0; i < count; i++){
  84. if(strcmp(students[i].id, student.id) == 0){
  85. printf("学号已存在,请重新输入。\n");
  86. return;
  87. }
  88. }
  89. printf("姓名:");
  90. scanf("%s", student.name);
  91. printf("年龄:");
  92. scanf("%d", &student.age);
  93. printf("性别:");
  94. scanf("%s", student.gender);
  95. printf("出生年月:");
  96. scanf("%s", student.birth);
  97. printf("地址:");
  98. scanf("%s", student.address);
  99. printf("电话:");
  100. scanf("%s", student.phone);
  101. printf("E-mail:");
  102. scanf("%s", student.email);
  103. students[count++] = student;
  104. }
  105. // 浏览学生信息
  106. void viewStudents() {
  107. printf("\n所有学生信息:\n");
  108. printf("%-15s%-10s%-10s%-10s%-15s%-30s%-20s%-30s\n", "学号", "姓名", "年龄", "性别", "出生年月", "地址", "电话", "E-mail");
  109. // 输出每个学生的信息
  110. for (int i = 0; i < count; i++) {
  111. printf("%-15s%-10s%-10d%-10s%-15s%-30s%-20s%-30s\n", students[i].id, students[i].name, students[i].age,
  112. students[i].gender, students[i].birth, students[i].address, students[i].phone, students[i].email);
  113. }
  114. }
  115. // 查询学生信息
  116. void searchStudent() {
  117. int choice;
  118. char id[20];
  119. char name[20];
  120. int found = 0;
  121. printf("\n查询学生信息:\n");
  122. printf("1. 按学号查询\n");
  123. printf("2. 按姓名查询\n");
  124. printf("请选择查询方式:");
  125. scanf("%d", &choice);
  126. switch (choice) {
  127. case 1:
  128. printf("请输入要查询的学号:");
  129. scanf("%s", id);
  130. printf("\n%-15s%-10s%-10s%-10s%-15s%-30s%-20s%-30s\n", "学号", "姓名", "年龄", "性别", "出生年月", "地址", "电话", "E-mail");
  131. for (int i = 0; i < count; i++) {
  132. if (strcmp(students[i].id, id) == 0) {
  133. printf("%-15s%-10s%-10d%-10s%-15s%-30s%-20s%-30s\n", students[i].id, students[i].name,
  134. students[i].age, students[i].gender, students[i].birth, students[i].address,
  135. students[i].phone, students[i].email);
  136. found = 1;
  137. break;
  138. }
  139. }
  140. break;
  141. case 2:
  142. printf("请输入要查询的姓名:");
  143. scanf("%s", name);
  144. printf("\n%-15s%-10s%-10s%-10s%-15s%-30s%-20s%-30s\n", "学号", "姓名", "年龄", "性别", "出生年月", "地址", "电话", "E-mail");
  145. for (int i = 0; i < count; i++) {
  146. if (strcmp(students[i].name, name) == 0) {
  147. printf("%-15s%-10s%-10d%-10s%-15s%-30s%-20s%-30s\n", students[i].id, students[i].name,
  148. students[i].age, students[i].gender, students[i].birth, students[i].address,
  149. students[i].phone, students[i].email);
  150. found = 1;
  151. }
  152. }
  153. break;
  154. default:
  155. printf("请输入正确的选项\n");
  156. }
  157. if (!found) {
  158. printf("未找到该学生信息\n");
  159. }
  160. }
  161. // 删除学生信息
  162. void deleteStudent() {
  163. char id[20];
  164. int found = 0;
  165. printf("\n请输入要删除的学生学号:");
  166. scanf("%s", id);
  167. // 遍历已有的学生信息,找到要删除的学生信息
  168. for (int i = 0; i < count; i++) {
  169. if (strcmp(students[i].id, id) == 0) {
  170. found = 1;
  171. // 将该学生信息从数组中删除
  172. for (int j = i; j < count - 1; j++) {
  173. students[j] = students[j + 1];
  174. }
  175. count--;
  176. printf("删除成功\n");
  177. break;
  178. }
  179. }
  180. if (!found) {
  181. printf("未找到该学生信息\n");
  182. }
  183. }
  184. // 修改学生信息
  185. void modifyStudent() {
  186. char id[20];
  187. int found = 0;
  188. printf("\n请输入要修改的学生学号:");
  189. scanf("%s", id);
  190. // 遍历已有的学生信息,找到要修改的学生信息
  191. for (int i = 0; i < count; i++) {
  192. if (strcmp(students[i].id, id) == 0) {
  193. found = 1;
  194. printf("\n请输入学生信息:\n");
  195. printf("学号:%s(不可修改)\n", students[i].id);
  196. printf("姓名:");
  197. scanf("%s", students[i].name);
  198. printf("年龄:");
  199. scanf("%d", &students[i].age);
  200. printf("性别:");
  201. scanf("%s", students[i].gender);
  202. printf("出生年月:");
  203. scanf("%s", students[i].birth);
  204. printf("地址:");
  205. scanf("%s", students[i].address);
  206. printf("电话:");
  207. scanf("%s", students[i].phone);
  208. printf("E-mail:");
  209. scanf("%s", students[i].email);
  210. printf("修改成功\n");
  211. break;
  212. }
  213. }
  214. if (!found) {
  215. printf("未找到该学生信息\n");
  216. }
  217. }
  218. // 将学生信息保存到文件
  219. void saveToFile() {
  220. FILE *fp;
  221. fp = fopen(FILE_NAME, "w");
  222. for (int i = 0; i < count; i++) {
  223. fprintf(fp, "%s,%s,%d,%s,%s,%s,%s,%s\n", students[i].id, students[i].name, students[i].age, students[i].gender,
  224. students[i].birth, students[i].address, students[i].phone, students[i].email);
  225. }
  226. fclose(fp);
  227. }
  228. // 从文件中读取学生信息
  229. void readFromFile() {
  230. FILE *fp;
  231. char line[500];
  232. char *token;
  233. const char delim[2] = ",";
  234. fp = fopen(FILE_NAME, "r");
  235. if (fp) {
  236. count = 0;
  237. while (fgets(line, 500, fp)) {
  238. // 将读取到的学生信息按逗号分隔,并依次填充到学生信息结构体中
  239. token = strtok(line, delim);
  240. strcpy(students[count].id, token);
  241. token = strtok(NULL, delim);
  242. strcpy(students[count].name, token);
  243. token = strtok(NULL, delim);
  244. students[count].age = atoi(token);
  245. token = strtok(NULL, delim);
  246. strcpy(students[count].gender, token);
  247. token = strtok(NULL, delim);
  248. strcpy(students[count].birth, token);
  249. token = strtok(NULL, delim);
  250. strcpy(students[count].address, token);
  251. token = strtok(NULL, delim);
  252. strcpy(students[count].phone, token);
  253. token = strtok(NULL, delim);
  254. // 如果当前字符是换行符,则跳过这个字符
  255. if (token[strlen(token) - 1] == '\n') {
  256. token[strlen(token) - 1] = '\0';
  257. }
  258. strcpy(students[count].email, token);
  259. count++;
  260. }
  261. fclose(fp);
  262. }
  263. }

三、运行效果

在这里插入图片描述
其他功能你们复制粘贴代码自己去试吧。

发表评论

表情:
评论列表 (有 0 条评论,153人围观)

还没有评论,来说两句吧...

相关阅读