问题提出
用C语言实现门禁系统功能。
功能简析
1、系统登录分为管理员登录和学生登录,输入相应字符即可选择登录;
2、学生登录,学生使用自己的账号密码登录系统,选择开启的门,即可开启门禁;此外系统还会记录下学生登录的信息,如登录账号、登录时间、开启哪间门;
3、管理员登录,管理员登录也是要输入特定的账号密码才能登录;登录之后才能进入管理员操作界面进行相应操作,如添加学生账号、删除学生账号、查看学生基本信息、查看学生登录情况……输入相应字符即可选择执行相应的功能。
4、管理员权限一:添加学生账号。输入学生姓名(即为账号)、密码、专业班级等基本信息,可用于后续查询,回车完成添加。查看系统中学生信息,该账号已存在
5、管理员权限二:删除学生账号。输入需要删除的账号,回车完成删除操作,查看系统数据库中已无该学生信息。
6、管理员权限三:查看所以学生基本信息。输入相应字符,即可查询所以信息
7、管理员权限四:查看学生登录门禁系统情况。输入相应相应字符,可按学生使用门禁系统时间先后顺序一次显示学生账号、登录时间,选择开启的门。
8、管理员权限五:修改存在于系统的学生信息。输入需要修改的学生账号,并输入修改后的账号、密码、专业班级等基本信息。
实现关键
首先考虑到要对学生账号等基本数据要重复使用,且易更改,下次使用时上次修改的信息还会存在而不是对代码进行修改,所以考虑使用对文本进行操作。将学生账号密码等数据信息全部储存在一个txt或dat文本中,调用函数对文本进行相应操作,对数据的操作即是对文件的操作。
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
struct information
{
char name[10];
char password[10];
char profession[20];
};
struct Thelog
{
char name[10];
char times[24];
char num[1];
};
FILE *fp; //文件指针
information *head; //链表头指针
void add_student(information a); //函数[1]管理员添加学生账号,使用门禁系统
void delete_student( char names[10]); //函数[2]管理员员删除学生账号,解除使用门禁系统权限
void administrator_login(); //函数[3]管理员登陆
void administrator_management(); //函数[4]管理员操作界面,添加学生账号,删除学生账号,查看学生使用门禁情况
void student_login(); //函数[5]学生登陆,用于打开门禁
void time (); //函数[6]时间函数,用于显示登陆时间
void All_output(); //函数[7]全部学生信息
void the_log(information a, char num[1]); //函数[8]录入学生使用门禁情况
void log_output(); //函数[9]输出学生使用门禁情况
void replace_massage( char names[10]); //函数[10]更改学生信息,只有管理员有权限
int main()
{
int n;
printf ( " *********************************************\n" );
printf ( " * 欢迎使用四海门禁系统!!! *\n" );
printf ( " *********************************************\n" );
printf ( "\n" );
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n" );
printf ( " *输入0:退出系统; 输入1:管理员登陆; 输入2:学生登陆*\n" );
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n" );
printf ( " " );
scanf ( "%d" ,&n);
while (n!=0)
{
if (n==1)
administrator_login();
else if (n==2)
student_login();
else if (n>10||n<0)
{
printf ( " *********************************************\n" );
printf ( " * 欢迎使用四海门禁系统!!! *\n" );
printf ( " *********************************************\n" ); break ;
}
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n" );
printf ( " *输入0:退出系统; 输入1:管理员登陆; 输入2:学生登陆*\n" );
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n" );
printf ( " " );
scanf ( "%d" ,&n);
}
printf ( " *********************************************\n" );
printf ( " * 欢迎使用四海门禁系统!!! *\n" );
printf ( " *********************************************\n" );
return 0;
}
void administrator_login() //管理员登录
{
information a;
printf ( " 请输入管理员账号:" );
scanf ( "%s" ,a.name);
printf ( " 请输入管理员密码:" );
scanf ( "%s" ,a.password);
if ( strcmp (a.name, "管理员" )==0&& strcmp (a.password, "123456789" )==0)
{
printf ( "\n" );
printf ( " *********管理员登陆成功!!!*********\n\n" );
administrator_management();
}
else
{
printf ( " 管理员登陆失败!!!请检查仔细核对账号、密码\n" );
}
}
void administrator_management() //管理员操作台
{
int num;
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n" );
printf ( " *输入1:注册学生账号 输入2:删除账号 输入3:显示所有学生信息*\n" );
printf ( " *输入4;查看学生使用门禁情况 输入5:修改学生信息 输入6:刷新屏幕 *\n" );
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n" );
printf ( " " );
scanf ( "%d" ,&num);
while (num!=-1)
{
if (num==0||num>10||num<0)
{
printf ( " 管理员身份已注销\n" );
break ;
}
if (num==1)
{
fp= fopen ( "student_Account.txt" , "a" );
information a;
printf ( " 请输入账号:" );
scanf ( "%s" ,a.name);
printf ( " 请输入密码:" );
scanf ( "%s" ,a.password);
printf ( " 请输入专业班级:" );
scanf ( "%s" ,a.profession);
add_student(a);
fclose (fp);
}
if (num==2)
{
char names[10];
printf ( " 请输入要删除的账号:" );
scanf ( "%s" ,names);
delete_student(names);
}
if (num==3)
{
fp= fopen ( "student_Account.txt" , "r" );
All_output();
fclose (fp);
}
if (num==4)
{
fp= fopen ( "Thelog.txt" , "r" );
log_output();
fclose (fp);
}
if (num==5)
{
char names[10];
fp= fopen ( "student_Account.txt" , "r+" );
printf ( " 请输入需要修改的账号:" );
scanf ( "%s" ,names);
replace_massage(names);
fclose (fp);
}
if (num==6)
{
system ( "cls" );
}
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n" );
printf ( " *输入1:注册学生账号 输入2:删除账号 输入3:显示所有学生信息*\n" );
printf ( " *输入4;查看学生使用门禁情况 输入5:修改学生信息 输入6:刷新屏幕 *\n" );
printf ( " */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n" );
printf ( " " );
scanf ( "%d" ,&num);
}
}
void student_login() //学生登录
{
information a;
information b;
fp= fopen ( "student_Account.txt" , "r" );
printf ( " 请输入账号:" );
scanf ( "%s" ,a.name);
printf ( " 请输入密码:" );
scanf ( "%s" ,a.password);
fread (&b, sizeof ( struct information),1,fp);
int i=0;
while ( feof (fp)==0)
{
if ( strcmp (a.name,b.name)==0&& strcmp (a.password,b.password)==0)
{
char num[1];
printf ( " 请选择要打开几号门\n" );
printf ( " " );
scanf ( "%s" ,num);
time ();
printf ( " 亲爱的%s童鞋,你成功登陆本系统,已开启%s号门\n" ,a.name,num);
i++;
the_log(a,num);
}
fread (&b, sizeof ( struct information),1,fp);
}
if (i==0)
printf ( " 登陆账号不存在或密码错误!!!若无账号请联系管理员分配账号\n" );
fclose (fp);
}
void delete_student( char names[10]) //管理员删除学生账号,解除使用门禁权限
{
FILE *p;
information a;
int i=0;
fp= fopen ( "student_Account.txt" , "r" );
p= fopen ( "student.txt" , "w" );
fread (&a, sizeof ( struct information),1,fp);
while ( feof (fp)==0)
{
if ( strcmp (a.name,names)==0)
{ fread (&a, sizeof ( struct information),1,fp);i=1;}
else
{
fwrite (&a, sizeof ( struct information),1,p);
}
fread (&a, sizeof ( struct information),1,fp);
}
if ( strcmp (a.name,names)!=0)
fwrite (&a, sizeof ( struct information),1,p);
else
i=1;
if (i==0)
printf ( " 账号%s不在系统中\n" ,names);
else
printf ( " 账号%s已成删除\n" ,names);
fclose (fp);
fclose (p);
remove ( "student_Account.txt" );
rename ( "student.txt" , "student_Account.txt" );
}
void add_student(information a) //管理员添加学生信息,分配账号,授权使用门禁系统
{
fseek (fp,- sizeof ( struct information),1);
fwrite (&a, sizeof ( struct information),1,fp);
printf ( " 添加学生%s成功!!!\n\n" ,a.name);
}
void time () //显示本地时间
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime (&rawtime );
printf ( " %s" , asctime (timeinfo));
}
void All_output() //输出所有学生信息
{
int i=0;
information a;
fread (&a, sizeof ( struct information),1,fp);
while ( feof (fp)==0)
{
printf ( " * * * * * * * * * * * * * * * * * * * * * * *\n" );
printf ( " * 学生账号:%-20s*\n" ,a.name);
printf ( " * 学生密码:%-20s*\n" ,a.password);
printf ( " * 专业班级:%-20s*\n" ,a.profession);
printf ( " * * * * * * * * * * * * * * * * * * * * * * *\n" );
printf ( "\n" );
i++;
fread (&a, sizeof ( struct information),1,fp);
}
if (i==0)
printf ( " 系统中无学生账号!!!\n\n" );
}
void the_log(information a, char num[1]) //实时保存学生使用门禁系统情况
{
FILE *p;
Thelog c;
strcpy (c.name,a.name);
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
strcpy (c.times, asctime (timeinfo));
strcpy (c.num,num);
p= fopen ( "Thelog.txt" , "a" );
fwrite (&c, sizeof ( struct Thelog),1,p);
fclose (p);
}
void log_output() //输出学生使用门禁系统情况
{
Thelog a;
fread (&a, sizeof ( struct Thelog),1,fp);
while ( feof (fp)==0)
{
printf ( "%s" ,a.times);
printf ( "学生%s登录了门禁系统,并开启了%s号门\n" ,a.name,a.num);
fread (&a, sizeof ( struct Thelog),1,fp);
}
}
void replace_massage( char names[10]) //更改学生信息
{
information a;
information b;
fread (&a, sizeof ( struct information),1,fp);
if ( strcmp (names,a.name)==0)
{
printf ( " 请输入更改后的账号:" );
scanf ( "%s" ,b.name);
printf ( " 请输入修改后的密码:" );
scanf ( "%s" ,b.password);
printf ( " 请输入修改后的专业班级:" );
scanf ( "%s" ,b.profession);
fseek (fp,- sizeof ( struct information),1); //文件指针退回原结构体头
fwrite (&b, sizeof ( struct information),1,fp); //更新联系人信息
printf ( " 信息更改成功!!!\n\n" );
}
else if ( feof (fp)==0)
replace_massage(names); //递归调用直到找到需要更改的姓名,并完成更改
else
printf ( "%s不在系统中!!!\n\n" ,names);
}
|
后期分析
后期可利用单片机实现刷卡登录的门禁系统,利用qt 设计可视化程序,在学生登录成功后触发相应的门开启或关闭。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_40247103/article/details/81408349