啊哈!今天来介绍一下成绩管理系统的升级版——学生信息管理系统。
之所以改名呢,不是因为觉得大家都写了成绩管理系统,更不是为了装逼,只是想换个名字。其实呢我这人很低调,我C语言能写出好多代码,但是我低调我不说。我的指针数组多厉害,因为我低调所以我不说……(此处省略……)
咳咳,还是说正事吧,一扯就收不住。
这次的成绩管理程序比较长,但仔细分析下,主要分为账号密码,成绩管理,通讯录三部分。
这篇博文里给大家介绍通讯录部分,相信以各位大兄弟大姐们比我略低的智商是可以举一反三,理解另外两部分的(我越来越不想听这大傻逼说话了,唉~)。
一,先来看主程序
1.我使用建立txt文件储存账号密码信息(在这我有个想法,就是让账号密码与用户的信息匹配,然后登陆后便能直接提供给用户之前所存数据),用户可以使用之前所建账户密码,或者新建。
2.在每次小片段进行后我都会用system("CLS");进行清屏,主要为了用户界面更加友好。
3.登陆之后,随即开始重头戏的上映,我用了几重do while循环和switch来实现用户持续地选择操作,配合上各类函数,这个程序便算是跑完了。
4.有点需要注意,我在有文件读写操作的程序片段开始时都有对文件的初始化,这是必须的,因为你只有找到对应文件才能继续后续操作。(逛街之前需要找到钱包,之后你才能使用钞票,没毛病)
二,看下contactinit()函数
这个函数是对通讯录.txt的初始化,文件存在便读取信息,注意到我在其中有段注释,allCount2 --;//因为最后输入时,会将换行符记为一行,故删除这是因为,在读取时因为你文件中每段信息会有一个换行符,在最后的换行会被当做一行给allCount加上,当然用程序读取和写入时没任何毛病,可如果你直接在外存文件中写入东西的话,很有可能程序就不能正常读写了。
/*函数功能:联系方式初始化*/ void contactinit() { FILE *fp; fp = fopen(adress2, "r"); allCount2 = 0; if(fp != NULL){ while(!feof(fp)){ fscanf(fp,"%s%s%s%s",stuc[allCount2].studentID, stuc[allCount2].name, stuc[allCount2].tel, stuc[allCount2].qq);//读取联系人信息 allCount2 ++; } allCount2 --;//因为最后输入时,会将换行符记为一行,故删除 } else { fp = fopen(adress2, "w");//创建联系方式 } fclose(fp); printf("学生联系方式.txt初始化成功!\n"); }三,看实现各个不同功能的函数
这里需要注意一下,函数的功能最好能够单一一点,别问为什么,自己体悟(因为你不知道,哈哈,你他妈是想要把我笑死然后继承老子的遗产吗?……)。
我简单给大家说下我的deleteContact()函数,在这我采用的方法是盖过那个需要删除的词条,然后改动后面数组的下标(其实还有种效率更高的,就是创建一个新的数组与值匹配,然后给需要删除的词条对应数打上标记,在读写时直接越过这个数就好)。
再看下我的searchContact()函数,我访问了所有词条,寻找那个与值匹配的(一起开黑不?……)词条,然后根据对应下标读出所有信息。但总感觉这样效率太低,应该有更好的优化,待我后期考虑考虑。点击打开链接
/*函数功能:删除联系人*/ void deleteContact() { FILE *fp; int flag; int i,j; char studentID[20]; lookContact(); printf("请输入要删除学生的学号:\n"); scanf("%s", studentID); printf("确定删除?删除后将无法恢复!1.确定0.取消\n"); scanf("%d", &flag); if(flag) { for(i = 0; i < allCount2; i ++) { if(strcmp(stuc[i].studentID,studentID) == 0) break; } if(i == allCount2) { allCount2 --; } else { for (j = i; j < allCount2 - 1; j++) { stuc[j] = stuc[j + 1]; } allCount2 --; } fp = fopen(adress2, "w"); if (fp != NULL) { for(i = 0; i < allCount2; i ++) { fprintf(fp,"%s\t%s\t%s\t%s\r\n",stuc[i].studentID, stuc[i].name, stuc[i].tel, stuc[i].qq); } } fclose(fp); printf("删除成功!"); } } /*函数功能:查找联系人*/ void searchContact() { char searchID[10]; int i; int flag = 0; printf("请输入要查找的学生学号:\n"); scanf("%s",searchID); for (i = 0; i < allCount2; i ++) { if (strcmp(searchID,stuc[i].studentID) == 0) { printf("您查找的联系人为:\n"); printf("%s\t%s\t%s\t%s\n",stuc[i].studentID, stuc[i].name, stuc[i].tel, stuc[i].qq); flag = 1; break; } } if(flag == 0) { printf("该学生不在联系方式内!\n"); } }四,介绍下我写这个程序的感受
初期基本什么都不会,然后就用到什么查什么,上QQ搜,问同学,问老师……偶尔饭没吃,偶尔熬夜到四点,偶尔在网上被人喷……但这些都不重要,重要的是真的学到了很多。其它也不多说(你说的还不多?额……)有点大家要注意,千万别经常熬夜,经常熬夜有三大弊端:第一,记忆力越来越差;第二,数数经常数错;第五,记忆力越来越差……(这句话是你从网上抄的,鄙视。我……我骄傲,咋滴)
给一发下大家这段程序的链接:http://pan.baidu.com/s/1skOmwXZ
皮皮虾,我们走,得儿,驾...