我的学生信息管理系统总结 您所在的位置:网站首页 c语言学生信息管理系统心得体会 我的学生信息管理系统总结

我的学生信息管理系统总结

2024-07-12 18:00| 来源: 网络整理| 查看: 265

我的学生管理系统总结

花了一天时间用C语言做了一个学生信息管理系统,有一些想要总结的地方,在此记录一下。  虽然是一个简单的系统,简单到只有增删改查功能,而且,保存数据的地方不是数据库,而是文件,但是,我还是按照了做大型项目时采用的“三层架构”的思路来写:大体上就是:底层,和数据库打交道;中间层,处理用户输入的业务逻辑,并将错误信息反馈给用户;表面层,就是和将界面展现给用户,接受用户的输入。  下面是,总结的一些好的代码:

1、判断键盘连续两次输入回车(也可以用来判断连续两次输入某字符)。 void back_button()/*在子菜单下,用户按两下回车键,返回主菜单*/{ printf("Please press \"Enter button\" two times to back previous menu.\n"); char ch; do { while (fflush(stdin), ch = getch(), ch != '\r'); if ((ch = getch()) == '\r'){ break; } } while (1); system("cls");} 2、用fgets()接受屏幕输入信息,一方面可以限制输入长度,一方面也能判断用户是直接按下回车键,还是直接按下Ctrl+Z. void sub_choose_1()/*子菜单1:根据学生姓名搜索学生信息*/{ system("cls"); char stu_name[STU_NAME_SIZE]; memset(stu_name,0,STU_NAME_SIZE);/*将字符串初始化为0*/ loops_search_stu_name:printf("Please input a name for search: \n"); fflush(stdin); fgets(stu_name, STU_NAME_SIZE, stdin); if (stu_name[0] == 0){ return; } strProcess(stu_name);/*将fgets()添加的'\n'去掉*/ if (strlen(stu_name) == 0){ printf("Student's name cannot empty!Please input again.\n"); goto loops_search_stu_name; } stu_pNode stu; stu = searchStuInfoByName(stuList,stu_name); showAllStuInfo(stu); back_button();} 3、上一个函数是对输入字符串时的错误信息进行判断,这个函数是对输入数时的错误信息进行判断。

(总结一下,由于fgets()的返回值是输入字符串的指针或者NULL,所以没法用返回值进行判断,也就没法用while循环。而scanf()函数的返回值是:正确接受时,返回接受的个数,没正确接受时,返回0,遇到Ctrl+Z时,返回EOF(即-1),所以,可以用循环进行处理)

void sub_choose_2()/*子菜单2:根据学生学号搜索学生信息*/{ system("cls"); int stu_id, input_info; printf("Please input a sno for search: \n"); printf("Sno: "); while (fflush(stdin), input_info = scanf("%d", &stu_id), input_info == EOF || input_info != 1){ if (input_info == EOF){ return; } printf("Sno is a number,please input again.\n"); printf("Sno: "); } stu_pNode stu; stu = searchStuInfoById(stuList,stu_id); showOneStuInfo(stu); back_button();} 4、这段代码,对fgets()的返回值进行了非常细的划分。 loop_modify_name:printf("Name: "); if (fflush(stdin), fgets(new_stu.stu_name, STU_NAME_SIZE, stdin)){/*用户敲回车,此条件成立*/ strProcess(new_stu.stu_name); } else{/*用户输入Ctrl+Z,此条件成立*/ strcpy(new_stu.stu_name, stu_info->stu_name); } if (strlen(new_stu.stu_name) == 0){ printf("Name must be not empty.If don't want to modify,press Ctrl+Z.\n"); goto loop_modify_name; } 5、这一大段代码,非常完美的模拟了用户输入用户名密码进行登录时的情景。其中包括了,允许用户有三次输错的机会、模拟将用户的输入信息转换成‘*’在屏幕上显示(包括按退格键时,‘*’跟着减少,密码输入过长,停止输入,并且有提示音等细节功能)。 void userNameprocess(char *str){ while (*str != 10){ ++str; } *str = 0;}void backspace(int *length,char **ch){ --(*ch); --(*length); putchar(8); putchar(32); putchar(8);}void passwordGets(char *psw){ char ch; int psw_length = 0, sign = 0; while ((ch = getch()) != '\r'){/*用户没有输入回车键时,继续监测键盘*/ if (psw_length /*如果是退格键*/ if (psw_length >0){ sign = 1; backspace(&psw_length, &psw); } else{/*长度小于0,即退格到开头了,响铃警报*/ putchar(7); } } else{/*不是退格键,继续前进*/ sign = 0; *(psw++) = ch; ++psw_length; } if (!sign){/*退格键标记,当用户按下退格键时,不再打印'*'.*/ putchar('*'); } } else if (ch == 8){/*长度超过限制,为能重新输入,即满足输入条件(lentgh char user_name[USER_NAME_SIZE]; char user_password[USER_PASSWORD_LEN]; user_pNode user; int count = 3; do{ --count; system("cls"); printf("enter user_name: "); fgets(user_name, USER_NAME_SIZE + 1, stdin);/*获取用户名*/ userNameprocess(user_name); system("cls"); printf("enter usr_password: "); passwordGets(user_password);/*获取用户密码*/ user = searchUserAccountInfoByName(userList, user_name); if (user){ if (strcmp(user->user_password, user_password) != 0){ if (count == 0){ system("cls"); printf("You have already input Wrong 3 times,system will be exit.\n"); } else{ printf("\nPassword wrong,please try again!you have %d times.\n", count); system("pause"); } } else{ return user->role_type; } } else{ if (count == 0){ system("cls"); printf("You have already input Wrong 3 times,system will be exit.\n"); } else{ printf("\nUser name is not exist,please try again!you have %d times.\n", count); system("pause"); } } } while (count); exit(-1);}


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有