C语言学生管理系统
想练习一下链表,所以就有了这个用C写的学生管理系统
没有把它写入文件,才不是因为我懒哈哈哈,主要是为了练习链表的
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 typedef struct student
6 { // 定义学生的基本数据
7 char stuName[10]; // 姓名
8 long stuID; // 学号
9 char gender[5]; // 性别
10 int score[3]; // 三门课的成绩
11 struct student* next;
12 }stu, *LNode;
13
14 typedef struct headNode
15 { // 定义链表的头结点类型
16 int length; // 储存学生数量
17 struct student* next;
18 }HNode;
19
20 HNode* InitList();
21 void printMenu();
22 void alternation(HNode* head);
23 int isExist(HNode* head, long existID);
24 void addStu(HNode* head);
25 void deleteStu(HNode* head);
26 void searchStu(HNode* head);
27 void modifyStu(HNode* head);
28 void displayStu(HNode* head);
29
30 int main()
31 {
32 HNode* head = InitList();
33 printf("************* 欢迎进入学生管理系统 *************\n");
34 while (1)
35 {
36 printMenu();
37 alternation(head);
38 }
39 return 0;
40 }
41
42 void printMenu()
43 { // 菜单
44 printf("\n - - - - - - - - -\n");
45 printf("| 1.添加学生信息 |\n");
46 printf("| 2.删除学生信息 |\n");
47 printf("| 3.修改学生信息 |\n");
48 printf("| 4.查找学生信息 |\n");
49 printf("| 5.显示全部信息 |\n");
50 printf("| 6.退出系统 |\n");
51 printf(" - - - - - - - - \n");
52 }
53
54 void alternation(HNode *head)
55 { // 选择要执行的操作
56 int option;
57 printf("请选择操作:");
58 scanf("%d", &option);
59 switch (option)
60 {
61 case 1: addStu(head); break; //添加
62 case 2: deleteStu(head); break; //删除
63 case 3: modifyStu(head); break; //修改
64 case 4: searchStu(head); break; //查询
65 case 5: displayStu(head); break; //显示全部学生信息
66 case 6: printf("退出系统,再见。"); exit(0);
67 default: printf("输入错误,请重新输入:");
68 }
69 }
70
71 HNode* InitList()
72 { // 初始化链表
73 HNode* head = NULL;
74 head = (HNode*)malloc(sizeof(HNode));
75 head->length = 0;
76 head->next = NULL;
77 return head;
78 }
79
80 void addStu(HNode* head) // 添加学生信息
81 { // 前插法添加学生信息
82 LNode p = NULL;
83 p = (stu*)malloc(sizeof(stu));
84 p->next = NULL;
85 //- - - - - - - - 开始录入信息 - - - - - - - -//
86 printf("请输入学号(输入-1录入结束):");
87 scanf("%d", &p->stuID);
88 if (p->stuID == -1)
89 return;
90 if (isExist(head, p->stuID))
91 { // 在添加之前判断是否已存在该学生
92 printf("已存在该学生信息,无需输入!");
93 return;
94 }
95 //getchar();
96 printf("请输入姓名:");
97 scanf("%s", &p->stuName);
98 printf("请输入性别:");
99 scanf("%s", &p->gender);
100 printf("请输入成绩(英语、语文、数学):");
101 for (int i = 0; i < 3; i++)
102 {
103 scanf("%d", &p->score[i]);
104 }
105 //- - - - - - - - 录入信息结束 - - - - - - - -//
106 head->length ++;
107 p->next = head->next; // 更新学生人数
108 head->next = p;
109 printf("添加成功!");
110 }
111
112 void deleteStu(HNode* head)
113 { // 删除某个学生的信息
114 stu* temp = NULL;
115 stu* p = head->next;
116 long deleteID;
117 printf("请输入要删除学生的学号:");
118 scanf("%d", &deleteID);
119 if (!isExist(head, deleteID))
120 { // 在删除之前判断是否已存在该学生
121 printf("不存在该学生,删除失败!");
122 return;
123 }
124 while (p != NULL)
125 {
126 if (p->next->stuID == deleteID)
127 {
128 temp = p->next;
129 p->next = p->next->next;
130 free(temp);
131 }
132 p = p->next;
133 }
134 printf("删除成功!");
135 }
136
137 int isExist(HNode* head,long existID)
138 { // 判断学生是否存在
139 stu* p = head->next;
140 while (p != NULL)
141 {
142 if (p->stuID == existID)
143 return 1;
144 p = p->next;
145 }
146 return 0;
147 }
148
149 void searchStu(HNode* head)
150 { // 查找某个学生的信息
151 long searchID;
152 stu* p = head->next;
153 printf("请输入要查询的学号:");
154 scanf("%d", &searchID);
155 if (!isExist(head, searchID))
156 { // 在查询之前判断是否不存在该学生
157 printf("不存在该学生,查询失败!");
158 return;
159 }
160 while (p != NULL)
161 {
162 if (p->stuID == searchID)
163 {
164 printf("该学生的信息如下:\n");
165 printf("姓名:%s\n学号:%d\n性别:%s\n英语成绩:%d\n语文成绩:%d\n数学成绩:%d\n",
166 p->stuName, p->stuID, p->gender, p->score[0], p->score[1], p->score[2]);
167 return;
168 }
169 p = p->next;
170 }
171 }
172
173 void modifyStu(HNode* head)
174 { // 修改某个学生的信息,支持单项信息修改
175 stu* p = NULL;
176 p = head->next;
177 long modifyID;
178 printf("输入要修改信息的学生的学号:");
179 scanf("%d", &modifyID);
180 if (!isExist(head, modifyID))
181 { // 在修改之前判断是否已存在该学生
182 printf("不存在该学生,修改失败!");
183 return;
184 }
185 while (p != NULL)
186 {
187 if (p->stuID == modifyID)
188 {
189 int option;
190 long newID;
191 char newName[10];
192 char newGender[5];
193 int newScore;
194 printf("请输入要修改的项目(1.学号 2.姓名 3.性别 4.英语成绩 5.语文成绩 6.数学成绩):");
195 scanf("%d", &option);
196 switch (option)
197 {
198 case 1: printf("请输入新的学号:"); scanf("%d", &newID); p->stuID = newID; break;
199 case 2: printf("请输入新的姓名:"); scanf("%s", newName); strcpy(p->stuName,newName); break;
200 case 3: printf("请输入新的性别:"); scanf("%s", newGender); strcpy(p->gender,newGender); break;
201 case 4: printf("请输入新的英语成绩:"); scanf("%d", &newScore); p->score[0] = newScore; break;
202 case 5: printf("请输入新的语文成绩:"); scanf("%d", &newScore); p->score[1] = newScore; break;
203 case 6: printf("请输入新的数学成绩:"); scanf("%d", &newScore); p->score[2] = newScore; break;
204 }
205 }
206 p = p->next;
207 }
208 printf("修改成功!");
209 }
210
211 void displayStu(HNode* head)
212 {
213 stu* p = NULL;
214 p = head->next;
215 printf("当前一共有%d个学生的信息,信息如下:\n",head->length);
216 while (p != NULL)
217 {
218 printf("学号:%d 姓名:%s 性别:%s 英语成绩:%d 语文成绩:%d 数学成绩:%d\n",
219 p->stuID, p->stuName, p->gender, p->score[0], p->score[1], p->score[2]);
220 p = p->next;
221 }
222 }