那就写个信息管理系统
前情提要
昨天(2020.0512)从一个简单的乘法口诀表的生成,一直扩展到了界面的转换,用switch case 代替 if else
然后,定睛一看,这不就奔着一个信息管理系统在写么。
所以。。。那就写个信息管理系统吧。
先贴上昨天的代码信息系统的萌芽哈哈哈(见链接末尾)
分析
信息管理系统,需要对信息进行存储、查找、插入、删除这几个基本功能。
首先需要的就是c语言的文件功能。
下面学习一些C语言文件的基本操作。
一、文件写入
首先函数原型为_CRTIMP FILE * __cdecl fopen(const char *, const char *);
先调用FILE 定义一个指针fp
然后再对fp进行操作
fopen(“文件地址及文件名”,“操作名”)
文件地址及文件名: 如没有文件,则只填写地址,如下
操作名:
“r”:只能从文件中读数据,该文件必须先存在,否则打开失败
“w”:只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件
“a”:向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾
“r+”:可读/写数据,该文件必须先存在,否则打开失败
“w+”:可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据
“a+”:可读/写数据,原来的文件不被删去,位置指针移到文件末尾
现在进行一个文件的创建
FILE* fp;
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "w");
建议大家在写代码的时候,如果不知道某条语句是否成功执行,就在后面插个眼printf("运行成功");
这样很容易就知道了。
文件创建好了,写入些东西吧
while ((ch = getchar()) != '0') {
fputc(ch, fp);
}
printf("文件写入成功");
通过fputc()
语句可以将字符写入指针fp所指向的文件中
效果就不贴图了,来回截图好麻烦,这一步骤很简单的。自己试试。
(这种类似介绍性话语就是防止我哪天突然完全忘记咋编代码而准备的)
文件写入了,接下来读出试试
字符读取函数
fgetc()
可从文件数据流中一次读取一个字符,然后读取光标移动到下一个字符,并逐步将文件的内容读出。如果字符读取成功,则返回所读取的字符,否则返回
EOF(end of file)
。EOF是表示数据结尾的常量,真值为-1。另外,要判断文件是否读取完毕,可利用feof()进行检查。未完返回0,已完返回非零值。
feof()函数原型为:_CRTIMP int __cdecl feof(FILE *);
————————————————————
内容摘自https://blog.csdn.net/tjcwt2011/article/details/81125912
原作者致守
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "r");
if (fp != NULL)
{
while (!feof(fp))
printf("%c", fgetc(fp));
}
else
printf("文件不存在!!!");
为了使代码结构清晰明了
分别建立fileput()和fileget()
void fileput(FILE *fp)//字符写入
{
char ch;
while ((ch = getchar()) != '0') {
fputc(ch, fp);
}
printf("文件写入成功");
}
void fileget(FILE *fp)//字符读取
{
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "r");
if (fp != NULL)
{
while (!feof(fp))
printf("%c", fgetc(fp));
}
else
printf("文件不存在!!!");
}
运行后发现无法读取文件
怀疑是写入的时候没有关闭所以没有保存
插入关闭函数fclose(fp);
读取成功
跳过scanf解决办法:在scanf前加getchar();
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS;
//文件相关练习
#include"stdio.h"
#include "stdlib.h"
#include "conio.h"
void usercontral();
void filecreate();
void fileput();
void fileget();
void filecreate()//文件创建
{
FILE* fp;
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "w");
printf("文件创建成功\n");
printf("是否返回菜单?是1");
int j;
scanf_s("%d", &j);
if (j == 1) {
system("cls");
usercontral();
}
else exit(0);
}
void fileput(FILE *fp)//字符写入
{
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "a");
printf("请写入\n");
char ch;
while ((ch = getchar()) != '0') {
fputc(ch, fp);
}
printf("文件写入成功\n");
fclose(fp);
printf("是否返回菜单?是1");
int j;
scanf_s("%d", &j);
if (j == 1) {
system("cls");
usercontral();
}
else exit(0);
}
void fileget(FILE *fp)//字符读取
{
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "r");
if (fp != NULL)
{
while (!feof(fp))
printf("%c", fgetc(fp));
printf("文件读取成功\n");
}
else
printf("文件不存在!!!\n");
fclose(fp);
printf("是否返回菜单?是1");
int j;
scanf_s("%d", &j);
if (j == 1) {
system("cls");
usercontral();
}
else exit(0);
}
void usercontral()
{
FILE* fp;
fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "r+");//设置可读写模式
int ch;
printf("0创建文件\n");
printf("1写入文件\n");
printf("2读取文件\n");
printf("请选择输入:");
/*scanf_s("%c", &ch,sizeof(ch));*/
printf("检查\n");
getchar();
scanf_s("%d", &ch);
switch (ch) {
case 0:system("cls"); filecreate(); break;
case 1:system("cls"); fileput(fp);break;
case 2:system("cls"); fileget(fp); break;
default:printf("请输入0-2");
}
}
int main()
{
//FILE* fp;
///*filecreate();*/
//fp = fopen("C:\\Users\\杨文峰\\Desktop\\Text\\text.txt", "w");
//printf("文件创建成功");
//fileput(fp);
//fileget(fp);
usercontral();
}
以上就实现了基本的文件读写操作
下面来建立信息库
待续。。。。。
学习参考https://blog.csdn.net/tjcwt2011/article/details/81125912
作者致守,多谢大佬分享。小白感激不尽!!