日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

【C 语言】文件操作 ( 学生管理系统 | 插入数据 | 查询数据 | 删除数据 )

發(fā)布時間:2025/6/17 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】文件操作 ( 学生管理系统 | 插入数据 | 查询数据 | 删除数据 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、學(xué)生管理系統(tǒng)
    • 1、插入數(shù)據(jù)
    • 2、查詢數(shù)據(jù)
    • 3、刪除數(shù)據(jù)
  • 二、完整代碼





一、學(xué)生管理系統(tǒng)



實(shí)現(xiàn)一個簡易學(xué)生管理系統(tǒng) , 驗(yàn)證文件操作 ;


1、插入數(shù)據(jù)


從命令行接收數(shù)據(jù) , 放入結(jié)構(gòu)體成員中 , 最后將結(jié)構(gòu)體數(shù)據(jù)寫出到內(nèi)存中 ;

/** 插入學(xué)生數(shù)據(jù)*/ int insert() {// 要寫入文件的結(jié)構(gòu)體struct student s1 = {0};// 打開要寫入的文件FILE *p = fopen("student.dat", "w");// 打開失敗直接退出if(p == NULL)return 0;while (1){// 提示輸入學(xué)生名字printf("input student's name:\n");// 阻塞等待命令行中用戶輸入學(xué)生名字scanf("%s", s1.name);// 如果用戶輸入 quit , 則退出循環(huán) , 保存文件if(strcmp(s1.name, "quit")==0)break;// 提示輸入某個學(xué)生的年齡printf("input %s's age:\n", s1.name);// 命令行阻塞等待用戶輸入學(xué)生年齡scanf("%d", &s1.age);// 將結(jié)構(gòu)體寫出到文件中fwrite(&s1, 1, sizeof (struct student), p);}// 關(guān)閉文件fclose(p);return 0; }

2、查詢數(shù)據(jù)


從命令行中輸入要查詢的學(xué)生信息 , 如果查詢?nèi)繉W(xué)生信息 , 則傳入 “all” ;

循環(huán)從文件中讀取單個結(jié)構(gòu)體信息 , 逐個遍歷結(jié)構(gòu)體的 name 成員 , 查詢是否是要查詢的學(xué)生姓名 ; 如果是則打印該數(shù)據(jù) ;

/** 查詢學(xué)生數(shù)據(jù)*/ int query() {// 緩存信息用的結(jié)構(gòu)體struct student s = { 0 };// 要查詢的數(shù)組char name[30] = { 0 };// 提示輸入要查詢的學(xué)生名字printf("input student's name:");// name 數(shù)組接收控制臺輸入的字符串scanf("%s", name);// 打開文件FILE *p = fopen("student.dat", "r");// 文件打開失敗退出if (p == NULL)return 0;// 使用該變量記錄是否查詢到學(xué)生信息int status = 0;// 循環(huán)讀取 student 結(jié)構(gòu)體數(shù)據(jù)// 每次都可以讀取到一個學(xué)生數(shù)據(jù)// 判斷該數(shù)據(jù)是否是要查詢的學(xué)生數(shù)據(jù)while(1){// 從文件中讀取一個結(jié)構(gòu)體大小的數(shù)據(jù)fread(&s, 1, sizeof(struct student), p);// 判斷是否讀取到文件末尾, 注意 feof 必須在文件操作之后才能調(diào)用if (feof(p))break;// 如果學(xué)生名字是 all , 則打印所有學(xué)生信息if (strcmp(name, "all") == 0){// 打印學(xué)生信息printf("name=%s, age=%d\n", s.name, s.age);// 標(biāo)記信息找到status = 1;}else{// 對比本次讀取的學(xué)生信息是否是要查詢的信息if (strcmp(name, s.name) == 0){// 打印要查詢的學(xué)生信息printf("name=%s, age=%d\n", s.name, s.age);// 標(biāo)記信息找到status = 1;}}}// 關(guān)閉文件fclose(p);// 如果學(xué)生信息沒有找到, 打印提示信息if (status == 0)printf("student %s not found\n", name);return 0; }

3、刪除數(shù)據(jù)


將所有的學(xué)生數(shù)據(jù)一次性全部讀取出來 ;

然后逐個遍歷 , 使用 結(jié)構(gòu)體指針 , 逐個遍歷上述全部數(shù)據(jù) ;

遍歷的同時 , 寫出數(shù)據(jù) , 如果學(xué)生的名字不是要刪除的名字 , 則重新寫出到文件中 , 否則數(shù)據(jù)丟棄 , 這樣就實(shí)現(xiàn)了數(shù)據(jù)刪除操作 ;

/** 刪除學(xué)生*/ int delete() {// 打開學(xué)生信息文件FILE *p = fopen("student.dat", "r");// 如果打開失敗, 退出if (p == NULL)return 0;// 獲取文件大小 , 將文件指針跳轉(zhuǎn)到文件結(jié)尾fseek(p, 0, SEEK_END);// 獲取文件指針位置 , 該位置就是文件大小int size = ftell(p);// 為學(xué)生類型結(jié)構(gòu)體分配堆內(nèi)存空間, 分配文件大小空間struct student *s = malloc(size);// 文件指針指向開始位置fseek(p, 0, SEEK_SET);// 將所有的文件數(shù)據(jù)讀取到堆內(nèi)存中fread(s, 1, size, p);// 關(guān)閉文件fclose(p);// 提示要刪除的學(xué)生名字printf("input delete student's name: ");// 獲取要刪除的學(xué)生名字char name[30] = { 0 };// 從命令行接收學(xué)生名字scanf("%s", name);// 統(tǒng)計(jì)文件中記錄了多少個學(xué)生信息int n = size / sizeof(struct student);//得到了多少記錄數(shù)// 循環(huán)控制變量int i;// 以寫的方式打開文件 , 本次寫入文件是覆蓋寫出文件p = fopen("student.dat", "w");// 循環(huán)遍歷結(jié)構(gòu)體數(shù)據(jù)for(i = 0; i < n; i++){// 學(xué)生數(shù)據(jù)不是要刪除的數(shù)據(jù), 才能寫出到文件中if (strcmp(s[i].name, name) != 0)// 寫出一條學(xué)生數(shù)據(jù)結(jié)構(gòu)體fwrite(&s[i], 1, sizeof(struct student), p);}// 關(guān)閉文件fclose(p);// 釋放內(nèi)存中的文件數(shù)據(jù)內(nèi)存free(s);return 0; }



二、完整代碼



代碼示例 :

#include <stdio.h> #include <stdlib.h> #include <string.h>// 存儲學(xué)生姓名和年齡結(jié)構(gòu)體 struct student {char name[30]; // 姓名int age; // 年齡 };/** 插入學(xué)生數(shù)據(jù)*/ int insert() {// 要寫入文件的結(jié)構(gòu)體struct student s1 = {0};// 打開要寫入的文件FILE *p = fopen("student.dat", "w");// 打開失敗直接退出if(p == NULL)return 0;while (1){// 提示輸入學(xué)生名字printf("input student's name:\n");// 阻塞等待命令行中用戶輸入學(xué)生名字scanf("%s", s1.name);// 如果用戶輸入 quit , 則退出循環(huán) , 保存文件if(strcmp(s1.name, "quit")==0)break;// 提示輸入某個學(xué)生的年齡printf("input %s's age:\n", s1.name);// 命令行阻塞等待用戶輸入學(xué)生年齡scanf("%d", &s1.age);// 將結(jié)構(gòu)體寫出到文件中fwrite(&s1, 1, sizeof (struct student), p);}// 關(guān)閉文件fclose(p);return 0; }/** 查詢學(xué)生數(shù)據(jù)*/ int query() {// 緩存信息用的結(jié)構(gòu)體struct student s = { 0 };// 要查詢的數(shù)組char name[30] = { 0 };// 提示輸入要查詢的學(xué)生名字printf("input student's name:");// name 數(shù)組接收控制臺輸入的字符串scanf("%s", name);// 打開文件FILE *p = fopen("student.dat", "r");// 文件打開失敗退出if (p == NULL)return 0;// 使用該變量記錄是否查詢到學(xué)生信息int status = 0;// 循環(huán)讀取 student 結(jié)構(gòu)體數(shù)據(jù)// 每次都可以讀取到一個學(xué)生數(shù)據(jù)// 判斷該數(shù)據(jù)是否是要查詢的學(xué)生數(shù)據(jù)while(1){// 從文件中讀取一個結(jié)構(gòu)體大小的數(shù)據(jù)fread(&s, 1, sizeof(struct student), p);// 判斷是否讀取到文件末尾, 注意 feof 必須在文件操作之后才能調(diào)用if (feof(p))break;// 如果學(xué)生名字是 all , 則打印所有學(xué)生信息if (strcmp(name, "all") == 0){// 打印學(xué)生信息printf("name=%s, age=%d\n", s.name, s.age);// 標(biāo)記信息找到status = 1;}else{// 對比本次讀取的學(xué)生信息是否是要查詢的信息if (strcmp(name, s.name) == 0){// 打印要查詢的學(xué)生信息printf("name=%s, age=%d\n", s.name, s.age);// 標(biāo)記信息找到status = 1;}}}// 關(guān)閉文件fclose(p);// 如果學(xué)生信息沒有找到, 打印提示信息if (status == 0)printf("student %s not found\n", name);return 0; }/** 刪除學(xué)生*/ int delete() {// 打開學(xué)生信息文件FILE *p = fopen("student.dat", "r");// 如果打開失敗, 退出if (p == NULL)return 0;// 獲取文件大小 , 將文件指針跳轉(zhuǎn)到文件結(jié)尾fseek(p, 0, SEEK_END);// 獲取文件指針位置 , 該位置就是文件大小int size = ftell(p);// 為學(xué)生類型結(jié)構(gòu)體分配堆內(nèi)存空間, 分配文件大小空間struct student *s = malloc(size);// 文件指針指向開始位置fseek(p, 0, SEEK_SET);// 將所有的文件數(shù)據(jù)讀取到堆內(nèi)存中fread(s, 1, size, p);// 關(guān)閉文件fclose(p);// 提示要刪除的學(xué)生名字printf("input delete student's name: ");// 獲取要刪除的學(xué)生名字char name[30] = { 0 };// 從命令行接收學(xué)生名字scanf("%s", name);// 統(tǒng)計(jì)文件中記錄了多少個學(xué)生信息int n = size / sizeof(struct student);//得到了多少記錄數(shù)// 循環(huán)控制變量int i;// 以寫的方式打開文件 , 本次寫入文件是覆蓋寫出文件p = fopen("student.dat", "w");// 循環(huán)遍歷結(jié)構(gòu)體數(shù)據(jù)for(i = 0; i < n; i++){// 學(xué)生數(shù)據(jù)不是要刪除的數(shù)據(jù), 才能寫出到文件中if (strcmp(s[i].name, name) != 0)// 寫出一條學(xué)生數(shù)據(jù)結(jié)構(gòu)體fwrite(&s[i], 1, sizeof(struct student), p);}// 關(guān)閉文件fclose(p);// 釋放內(nèi)存中的文件數(shù)據(jù)內(nèi)存free(s);return 0; }/** 打印學(xué)生管理系統(tǒng)幫助信息*/ void printf_help() {printf("help info :\n");printf("i : insert student data\n");printf("q : query student data\n");printf("d : delete student data\n"); }/** 函數(shù)入口* 參數(shù) i 表示插入數(shù)據(jù)* 參數(shù) q 表示查詢數(shù)據(jù)* 參數(shù) d 表示刪除數(shù)據(jù)*/ int main(int argc, char **args) {// 判斷參數(shù)個數(shù)是否合法if (argc < 2){// 提示正確的參數(shù)信息printf_help();return 0;}// 插入數(shù)據(jù)if (strcmp(args[1], "i") == 0)insert();// 查詢數(shù)據(jù)if (strcmp(args[1], "q") == 0)query();// 刪除數(shù)據(jù)if (strcmp(args[1], "d") == 0)delete();return 0; }

編譯程序 : 生成 student.exe 可執(zhí)行文件 ;

gcc main.c -o student


輸入錯誤參數(shù) : 如果輸入?yún)?shù)小于 2 個 , 則提示參數(shù)信息 ;


插入數(shù)據(jù) :

查詢數(shù)據(jù) :

刪除數(shù)據(jù) :

總結(jié)

以上是生活随笔為你收集整理的【C 语言】文件操作 ( 学生管理系统 | 插入数据 | 查询数据 | 删除数据 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品欧美一区二区精品久久 | 国产三级视频网站 | 欧美日韩成人一区 | 超碰在线综合 | 男人操女人动态图 | 学生调教贱奴丨vk | 国产77777 | 国产精品久久久久久久久久小说 | 国产一二三在线 | 大号bbwassbigav女 | 九九九热| 日本三级一区二区 | 欧美三根一起进三p | 欧美91精品 | 天堂二区 | 成人爽a毛片一区二区 | 四虎影院一区 | 亚洲精品专区 | 欧美三级不卡 | 国产成人自拍偷拍 | 久久中文字幕一区 | 国产传媒在线观看 | 91水蜜桃| 熟女俱乐部一区二区视频在线 | 91在线观看欧美日韩 | 日本三级一区二区 | 亚洲精品中文无码AV在线播放 | 欧美日韩在线一区二区三区 | 国产综合第一页 | 日韩精品卡通动漫网站 | 护士的小嫩嫩好紧好爽 | 一区精品视频在线观看 | 东方影库av | 神马影院午夜伦理 | 久久久男女 | 在线污视频 | ass精品国模裸体欣赏pics | 五月天男人天堂 | 尤物视频在线免费观看 | 成人毛片av | 黄色三级三级三级三级 | 日韩一区二区三区免费在线观看 | 欧美日本高清 | 久久888 | 超碰日韩在线 | 亚洲综合久久婷婷 | 国产精品999. | 亚洲一区二区国产精品 | 国产主播在线一区 | 日本毛片在线观看 | 欧美1区2区 | 日韩精品一区二区不卡 | 一级全黄裸体免费视频 | 欧美极品少妇xxxxⅹ喷水 | 国产一道本 | 97人妻精品视频一区 | 亚洲成人精品一区二区三区 | 又黄又免费的网站 | 国产成人一区二区三区视频 | 伊人网在线视频观看 | xxx日本少妇 | 性色欲网站人妻丰满中文久久不卡 | 爱情岛成人| 91影院在线免费观看 | av在线一区二区 | 1024手机在线看片 | av在线网页 | 麻豆网页 | 国产精品一区二区三区四 | 三年大片在线观看 | 成人靠逼视频 | 蜜桃99视频一区二区三区 | 在线国产黄色 | 99夜色| 一级片自拍 | 欧美在线网址 | 岛国av免费在线观看 | 黄色小视频链接 | 国产无码精品在线观看 | 苍井空张开腿实干12次 | 狠狠人妻久久久久久 | 一区免费观看 | 深夜成人福利视频 | 成人免费视频播放 | 亚洲人交配视频 | 免费国产黄色片 | 免费三级大片 | 日韩大片在线免费观看 | 黄色三级小说 | 麻豆chinese新婚xxx | www插插 | 欧美,日韩,国产在线 | 亚洲精品一区二区三区中文字幕 | 青青草免费在线 | av成人在线看 | 久久亚洲av永久无码精品 | 亲切的金子片段 | 中文久久乱码一区二区 | 色一情一区二区三区四区 |