学生管理系统总结

完整代码地址

部分功能实现的思路

实现密码星号输入及其退格

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语言的基本操作,也学到了编程的实际应用相比做题要考虑的东西要更多,要考虑用户的体验,在错误输入时要做好应对。

在写程序前最好把如何实现各个模块的方法考虑好,不要写到一半发现不行再转换思路,这样很耽误时间

增强函数的复用性,能再次使用的最好封装成函数,避免代码过于复杂.

猜你喜欢

转载自blog.csdn.net/qq_42265289/article/details/80550545
今日推荐