这是我的第一个项目,就把这次项目所遇到的问题都记录总结下来吧。(需要源码私信)
目录
1.printf("****** \t ******");
在学籍管理系统的菜单书写时,为了对齐我们可以 使用\t进行对齐 ,根据我查到的资料发现\t有着他自己的性质,并不是说无论间距多少个空格他都能自动补齐。而是逢八补齐,对于相距空格数小于八时可以达到自动补齐的效果,否则只能是八的倍数。 借用一下一个博主的一句话:“因此,\t的空格数应为|x (含有的字符数) - 8| % 8,逢8补齐。”博主那篇\t文章传送门
2. 简洁头函数
由于是创建项目,我们会引用到很多头函数,例如我现在就已经用到了这些函数头。
#include <stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
同样,我在主函数main(){ }里又定义一个个新的函数,分别构成着管理系统的菜单功能。 我们可以把我们所用到的这些函数名称写道函数头(加入命名为:tou.h)里,那么我们在源文件只需要引用#include"tou.h"就可以省去这些头函数和函数声明,在主函数后面进行定义就可以了。
3.所用到的一些新的函数
1 )库函数<stdlib.h>中
对于主菜单显示后,我使用了一个while循环:代码如下
while (1) {
Welcome();//显示主菜单
char ch= _getch();
//引用_ getch函数(来自conio.h)特点是不必输入回车,自动就可以识别
switch (ch){
case '1':InputStudent(); break; //录入学生信息
case '2':PrintStudent(); break; //打印学生信息
case '3': break; //保存学生信息
case '4': break; //读取学生信息
case '5': break; //统计学生人数
case '6': break; //查找学生信息
case '7': break; //修改学生信息
case '8': break; //删除学生信息
case '9': break; //退出系统
default :printf("没有这个功能"); break;
}
}
这段代码是我的代码的骨架。
其中有两个system函数特别好用,它们分别是:
1)system("pause")
这个函数的作用是:让我在按一次回车(录入完信息)程序不会立刻停止,而是会暂停(等待第二次回车),第二次回车程序才会正常运行(两次回车才相当于以前的一次回车)。
因为我在录入学生信息后我要按回车,而如果没有这个函数的话,那么由于while函数的作用,程序会立即再出现一个菜单那么就把我前面的信息给隐藏了,会让使用者感觉风中凌乱,所以为了提高体验感,我们可以使用这个函数。在我们使用这个函数后我们按一下回车程序不会立即结束,而是会先暂停,再按一下回车程序才会停止。
2)system("cls")
这个函数的作用是:清除小黑框(终端)上的所有东西,进行下一步程序(看着更加美观)。
接着上面的说,因为while(1){}所以录入学生信息的程序结束后,会再次出现一个主菜单,(主菜单还比较长。。。。)为了提升体验感,我们使用system("cls"),将以前的程序全部清除掉,(在一个功能结束后)再次出现菜单(由于while),让用户进行再次操作。
2 )库函数<conio.h>中 1)getch()
这个函数的作用是我们输入单个字符,不用按回车就能被系统读取,增加体验感。
//用法如下:
char ch;
//或者 int ch;
然后ch=getch();
3 )文件函数
1)fopen()
这个函数的作用是打开文件,具体用法是
fopen("文件地址","操作类型")
对于操作类型有如下几种类型:
"r" 打开一个文本文件,文件必须存在,只允许读
"r+" 打开一个文本文件,文件必须存在,允许读写
"rb" 打开一个二进制文件,文件必须存在,只允许读
"rb+" 打开一个二进制文件,文件必须存在,允许读写
"w" 新建一个文本文件,已存在的文件将内容清空,只允许写
"w+" 新建一个文本文件,已存在的文件将内容清空,允许读写
"wb" 新建一个二进制文件,已存在的文件将内容清空,只允许写
"wb+" 新建一个二进制文件,已存在的文件将内容清空,允许读写
"a" 打开或新建一个文本文件,只允许在文件末尾追写
"a+" 打开或新建一个文本文件,可以读,但只允许在文件末尾追写
"ab" 打开或新建一个二进制文件,只允许在文件末尾追写
"ab+" 打开或新建一个二进制文件,可以读,但只允许在文件末尾追写
我的代码为FILE *fp=fopen("C:\\StudentmanagerDATE.dat","w"); 如果打开失败的情况下,指针fp会返回一个NULL。
不要忘记使用fopen后要使用fclose。
2)fwrite()
我的项目代码: fwrite(&p->stu,1,sizeof(Student),fp);
函数原型是:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr -- 这是指向要被写入的元素数组的指针,是获取数据的地址。
size -- 这是要被写入的每个元素的大小,以字节为单位。
nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流,是目标文件的指针。
3)fclose()
函数原型为: int fclose(FILE * stream);
stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流,是目标文件的指针。
fclose()与fopen()是相互照应的,通常我们使用过fopen后使用fcloes进行关闭文件,否则会很麻烦,例如对文件进行更改没有被记录。
-------要原码私信