c语言录入文件信息时如何确定某一学号的人已存在
两种思路,1如果文本不大的话,可以把文本中的所有信息读取出来,在内存中进行判断修改,修改完毕后将原文件内容冲掉,将新信息写入进去
2如果文本较大或者不想这么做的话,可以读取的时候进行判断,读入一个学号,根据你所需要进行的判断之类的,确定要不要修改,如果要修改,就将当前文件指针位置后面的对应数据修改。
这种方法麻烦很多,而且我也不知道你文本是如何存放的,所以可能不太靠谱
推荐第一种方法
1、首先创建一个c语言项目。然后右键头文件,创建一个Stu的头文件。
2、然后编写头文件的代码。再将数据结构的增删改查和结构体写入头文件。
3、然后在源文件中创建main源文件和Stu源文件。再main文件中写入int mian()代码。
4、然后在mian主函数中,写入while语句无限循环。再写入Init函数。
5、然后在Stu源文件的Init函数用printf语句,将学生管理系统输出。再创建链表的头节点head。
6、然后用switch函数对操作进行判断。再执行数据结构的增删改查功能。
思路:
1、用变量接收输入。
2、读取文件内容到内存中(比如用链表保存)。
3、循环遍历内存数据,对比输入的值,存在相同则表示已存在。
下面代码是我写得演示:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <windows.h>
#define P "C:\\1.txt"
typedef struct stu_info
{
int sNum;// 学号
char name[20];//姓名
struct stu_info *next;
}SINFO;
int insert2File(char path[]);// 向文件末尾插入一条学生信息
SINFO * selectALLFILE(char path[]);//只读模式打开文本,获取信息, 返回信息链表头节点(该函数单独调用的话,记得调用freeSINFOS释放内存)
int checkSN(SINFO sinfo,char path[]);//检查路径下文件中,学号是否存在,存在返回1,否则返回0
int freeSINFOS(SINFO *sHead);//释放链表内存
void showSINFOS(SINFO *sHead);//打印链表信息
int main()
{
SINFO *sHead=NULL;
while(1)
{
sHead=selectALLFILE(P);
showSINFOS(sHead);
insert2File(P);
free(sHead);
sHead=NULL;
printf("按任意键继续录入。。。
"),getchar();
system("cls");
}
return 0;
}
void showSINFOS(SINFO *sHead)
{
printf("当前从文件加载到内存中的信息为:
");
if(sHead && sHead->next)
while(sHead->next)
{
printf("学号:%d 姓名:%s
",sHead->next->sNum,sHead->next->name);
sHead=sHead->next;
}
}
int insert2File(char path[])
{
SINFO sinfo;
FILE *fp=NULL;
if(!(fp=fopen(path,"at+")))return 0;
printf("请输入要插入的学生信息:
");
printf(" 学号:"),scanf("%d",&sinfo.sNum);
printf(" 姓名:"),scanf("%s",sinfo.name),getchar();
if(checkSN(sinfo,path))
{
printf("当前学号已存在!新增失败!
");
return 0;
}
fprintf(fp,"%d %s
",sinfo.sNum,sinfo.name);
fclose(fp);
printf("新增信息插入成功!
");
return 1;
}
SINFO *selectALLFILE(char path[])//查询文件
{
SINFO *sHead=NULL,*sTail=NULL,*sNew=NULL,sTemp;
FILE *fp=NULL;
if(!(fp=fopen(path,"rt"))) return NULL;
fseek(fp,0,SEEK_SET);
sHead=(SINFO *)malloc(sizeof(SINFO));
if(!sHead)return NULL;
sHead->next=NULL;
while(fscanf(fp,"%d %s
",&sTemp.sNum,sTemp.name)!=-1)
{
sNew=(SINFO *)malloc(sizeof(SINFO));
if(!sNew)return NULL;
sNew->next=NULL;
sNew->sNum=sTemp.sNum;
sprintf(sNew->name,"%s",sTemp.name);
if(!sHead->next)
sHead->next=sNew;
else
sTail->next=sNew;
sTail=sNew;
}
fclose(fp);
return sHead;
}
int checkSN(SINFO sinfo,char path[])//检查学号是否存在,存在返回1,否则返回0
{
SINFO *sHead=NULL;
sHead=selectALLFILE(path);
if(!sHead) return 0;
if(!sHead->next) {freeSINFOS(sHead);return 0;}
while(sHead->next)
{
if(sinfo.sNum==sHead->next->sNum) return 1;
sHead=sHead->next;
}
freeSINFOS(sHead);
return 0;
}
int freeSINFOS(SINFO *sHead)
{
SINFO *sTemp=NULL;
if(!sHead)return 1;
while(sHead->next)
{
sTemp=sHead->next->next;
free(sHead->next);
sHead->next=sTemp;
}
free(sHead);
return 1;
}
C语言大神。看过来,要求不高。。简单写下,最好不要使用链表和节点。完...
1、输入:函数input把20学生的学号、姓名、性别、年龄、三科成绩以及平均成绩和总成绩放在一个结构体数组中,学生的学号、姓名、三科成绩由键盘输入,然后计算出平均成绩和总成绩放在结构体对应的域中。注意:函数应有两个参数,结构体类型的数组以及学生的人数保存:save函数把数组里的学生信息写入文件,关闭文件。3、插入...
求助高手,用C语言写一个学生成绩管理系统。。。
4、信息删除与修改——输入学号,删除该学生的成绩信息。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。要求:1、用C语言实现程序设计;2、利用结构体...
学生信息管理系统(C语言)
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:1、系统以菜单方式工作2、学生信息录入功能(学生信息用文件保存)--输入3、学生信息浏览功能--输出4、学生信息查询功能--算法按学号查询按姓名查询5、学生信息的删除与修改(可选项)? 展开 ...
c语言中,存储文件时为什么乱码,但显示的时候不是乱码
因为你存入文件的是一个个的结构体变量,而不是单纯的文本数据
求大神,c语言程序设计,图书信息管理系统。救命啊。。
开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息。基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入v(2)图书... 开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息。基本功能: (1)图书信息录入...
C语言实训图书信息管理系统设计
试设计一图书信息管理系统,使之能提供以下功能:1、图书信息录入功能(图书信息用文... 图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:1、图书信息录入功能(图书信息用文件保存)--输入2、图书信息浏览功能3、图书信息查询...
怎么用C语言向一个TXT文件中录入一个换行符
include<stdio.h>int a;char b,c[100];int main(){ FILE * fp1 = fopen("input.txt", "r");\/\/打开输入文件 FILE * fp2 = fopen("output.txt", "w");\/\/打开输出文件 if (fp1==NULL || fp2==NULL) {\/\/若打开文件失败则退出 puts("不能打开文件!"); return 0...
C语言中把数据储存在txt文件时,原来txt中的内容被覆盖了。
你fopen函数选择的是参数不对造成的。在C语言中,这个函数的参数由r,w,a,t,b,+六个字符拼成,各字符的含义是:r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件,可省略不写 b(binary): 二进制文件 +: 读和写 你在参数中肯定没有使用a,所以不是追加,而是从头写入了。
C语言编程
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:1)系统以菜单方式工作2)课程信息录入功能(课程信息用文件保存)--输入3)课程信息浏览功能--输出4)查询功能:(...
求C语言高手编写学生信息管理系统
试设计一学生信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)学生信息录入功能(学生信息... 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:(1) 系统以菜单方式工作(2) 学生信息录入功能(学生信息用文件保存)---输入(3) 学生信息...
季梦开同: 对于一般的.txt文件用 fscanf()函数可以读取,但对于:输入学号,可输出一系列关于他的信息 应该考虑结构,这样读取方法不一样,简单的文本输入是不行的,最好在写入时用结构方式写入 如:Fraed() fwrite()函数的方式.
丰镇市13079291168: 在C语言中,怎么能读取文件中的某一部分的数据,并且赋值给确定的变量. - ?
季梦开同: 用.ini文件来存储.比如内容是:[UserInfo] UserName=admin 读取方式:char achUserName[20]; GetPrivateProfileString("UserInfo","UserName",NULL,achUserName,20,"c:\\userInfo.ini");
丰镇市13079291168: 用C语言编写一个程序,将输入的学生信息从文件中读出,并按学号进行排序后输出显示. - ?
季梦开同: #include #define STUCOUNT 5 typedef struct STU_INFO { char stuNo[7]; char stuName[11]; } STU_INFO; int main(int argc, char *argv[]) { FILE *in; STU_INFO info[STUCOUNT-1]; //STUCOUNT个学生 char *filePath = "C:/stu.dat"; if ((in = fopen(...
丰镇市13079291168: c语言中怎么确定信息所写入文件在硬盘中的位置呢?最起码盘符应该知道吧 - ?
季梦开同: 如果是windows盘符自然就包含在路径中了,注意如果相对路径,那么文件夹所在的盘符就是打开文件的盘符.Linux一般没有盘符一说.位置是你打开文件时执行的函数锁定的,如果你想了解更多可以看一下使用的库的头文件,源码更好,这类函数中最基本的当然就是fopen了.fopen把信息都放到了一个结构体中,其实你可以自由查看,甚至更改,不过注意有时候结果是很自由的,比如当写的文件的位置被改成磁盘的逻辑0位置.
丰镇市13079291168: C语言如何读取文件中指定的某一段 - ?
季梦开同: 使用fread函数读取指定长度的字符串,即使包含\n也会被读取,可以首先使用fseek定位到文件结尾,然后ftell函数返回的值就是文件的大小,这样就可以用循环多次读取文件,直到读取所有内容 FILE *file = NULL; char szFile[1025] = {0}; int ...
丰镇市13079291168: c语言怎样判定输入的数据时一个整型数据 - ?
季梦开同: 因为输入float时,系统也会把float变成整型,所以只需要处理非数值型就可以了,程序如下 void main() {int a, i; i = scanf("%d",&a); // 读成功,则返回成功读入的数据个数,这里为i=1,不成功则返回i=0 if (i==1) printf("%d",a); else printf("input error !\n"); } system("PAUSE"); }
丰镇市13079291168: C语言指定读入文件中的字符 - ?
季梦开同: #include<stdio.h> int main() { int i=0,m=2,n=3; char str[255]=""; FILE *fp=fopen("test.txt","r"); if(!fp)return 1; while(fgets(str,255,fp)) { i++; if(i==m){printf("第%d行第%d列为: %c\n",m,n,str[n-1]);break;} } fclose(fp); return 0; }
丰镇市13079291168: C语言里怎么判断输入的学号是否正常? - ?
季梦开同: 基本流程是读入学号到字符串,然后循环判断字符串各位的字符,如果全为数字(或其他规则)则合法.
丰镇市13079291168: C语言编程: 希望有具体代码,谢谢您们 我向一个文本文件输入了一些学生的信息: 姓名 - ?
季梦开同: 能是能,但是太麻烦,你这样写不好,你这样解析文件不好弄,简单点的话你就这么存姓名=叶枫,刘曦 ... 学号=16920728;16920729 ...性别=男;女 ...这样你解析会简单些,你那样完全没法搞 思路就是你读文件,解析字符串,然后存起来,然后再查找
丰镇市13079291168: C语言中学生信息的录入功能 - ?
季梦开同: 1.根据学生信息定义一个结构体类型,再说明一个该结构体类型的数组.*/ struct stu_info{char stuNo[10];/* No */char stuName[30];/* Name */float stuScore[3];/* the three scores */float aveScore; /* average score */float totalScore; /* total score...