部分功能实现的思路
实现密码星号输入及其退格
int A = 0;
char c = 0;
while (A < 20 && c != 13) //13是回车符的ASCII码
{
c = getch();
if (c != 13 && c != 8)
{
putch('*');
a.pwd[A++] = c;
}
else if (c == 8 && A>0)//实现退格
{
putchar('\b');
putchar(' ');
putchar('\b');
A--;
}
}
if (A == 0)
{
MessageBox(hwnd, "密码不能为空", "注册失败", 0);
getch();
clrscr();
fclose(fp);
chushi();
}
每次从键盘获取一个字符,根据ASC码对其进行判断,不为回车(ASC码为13)继续输入,不为退格(ASC码为8)时将输入存入字符数组,并使A+1(用A记录输入的个数),当键入退格时通过“\b \b”来实现,并使A-1,当A=0时禁止退格,防止将打印的内容删除
成绩输入的安全检查
while (0 == scanf("%d", &a.Math))
{
while ('\n' != getchar())
{
}
MessageBox(hwnd, "请勿输入非数字", "录入失败", 0);
clrscr();
admin_UI();
}
if (a.Math > 100 || a.Math < 0)
{
MessageBox(hwnd, "请输入正确的成绩(0-100)", "录入失败", 0);
clrscr();
admin_UI();
}
当要求输入成绩(int型)时输入非数字会导致输入失败(scanf返回0),这时要清除缓冲区,不然会导致后面的输入继续读取缓冲区内非法的内容导致程序错误。
总结
通过学生管理系统的编写,学习了c语言的基本操作,也学到了编程的实际应用相比做题要考虑的东西要更多,要考虑用户的体验,在错误输入时要做好应对。
在写程序前最好把如何实现各个模块的方法考虑好,不要写到一半发现不行再转换思路,这样很耽误时间
增强函数的复用性,能再次使用的最好封装成函数,避免代码过于复杂.