c语言录入文件信息时如何确定某一学号的人已存在

作者&投稿:铎秒 (若有异议请与网页底部的电邮联系)
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) 学生信息...

丰镇市13079291168: c语言读取txt文件,然后对文件信息进行查询,例如输入学号,可输出一系列关于他的信息. -
季梦开同: 对于一般的.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...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网