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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

学生信息管理系统(C语言,带文件操作)

發布時間:2023/12/16 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学生信息管理系统(C语言,带文件操作) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前情提示

這是本人大一的C語言程序設計的結課設計作業,由于這段時間一直在學習Java,C語言很久沒學了,所以在CSDN上找了很多代碼,經過對比最終發現博客C語言 學生成績管理系統 控制臺 文件操作(未涉及數據庫)最符合我的需求,然后對這個程序進行了一些修改,于是我的結課設計就誕生了

程序簡介

本程序設計具有學生信息的輸入、顯示、查詢、更新、刪除、保存等功能,利用清屏函數使操作界面簡潔美觀,易于操作。程序用了指針、結構體、鏈表等知識點。運用菜單實現交互式管理,用戶輕松的按鍵即可實現對軟件的操作,操作簡單易懂,功能豐富,可以很好的滿足需要

流程圖

源程序函數目錄

源代碼

#include<stdio.h> #include<stdlib.h> #include<string.h>#define max 100 //數組定義統一大小int g = 0; //全局變量,為登錄時輸入密碼次數 int student_number = 5; //全局變量,student_number為學生的人數struct user //定義一個結構體,存儲用戶登錄賬號和密碼,并初始化五個管理員的信息 {char username[20];char password[20]; }user[5] = {{"蔣超", "1450824311"},{"李佳樹", "2041775273"},{"劉英杰", "395636706"},{"胡友亮", "924056026"},{"黃家楊", "2946644844"} };struct student //定義結構體,包含學生信息,并初始化五個學生的信息 {char name[max]; //姓名char num[max]; //學號char sex[max]; //性別int chinese; //語文成績int mathematic; //數學成績int english; //英語成績int computer; //計算機成績 }s[5] = {{ "蔣超", "00001", "boy", 80,90,80,90},{ "李佳樹", "00002", "boy", 60,80,90,50},{ "黃家楊", "00003", "girl", 85,65,75,90},{ "胡友亮", "00004", "boy", 55,65,75,80},{ "劉英杰", "00005", "girl", 90,95,98,99} };struct student* p; //定義一個結構體指針//主菜單函數聲明 void login(); //登入函數 void main_menu(); //主界面函數 void input_record(); //輸入學生成績處理 1 void show_record(); //顯示學生成績處理 2 void search_record(); //查詢學生成績處理 3 void change_record(); //更新學生成績處理 4 void delete_record(); //刪除學生信息 5 void calc_record(); //計算成績處理 6 void save_record(); //保存處理 7 void exit_record(); //退出 8//查詢子函數聲明 void search_by_num(); //學號查詢 void search_by_name(); //姓名查詢 void search_by_sex(); //性別查詢 void search_by_exit(); //返回上一級//計算子函數聲明 void calc_sum(); //計算總成績 void calc_ave(); //計算平均成績 void calc_eixt(); //返回上一級//自定義函數 void print_table(); //表頭 void print_table_sum(); //總成績表格 void print_table_ave(); //平均分表格 void read(); //將文件中的數據讀入到結構體數組中int main() //*主函數 {login(); //首先進行管理員登錄main_menu(); //登錄成功后顯示主界面return 0; }void login() //登錄函數,管理員使用該系統前需進行登錄,定義密碼只允許輸錯三次 {int i;char id[20], password[20];printf("****登錄界面****\n");printf("請輸入賬號名:");scanf("%s", id);printf("請輸入密碼:");scanf("%s", password);for (i = 0; i < 5; i++) //遍歷五個管理員的信息,如果輸入的信息在初始化的信息中存在則登錄成功{if (strcmp(id, user[i].username) == 0 && strcmp(password, user[i].password) == 0){printf("登錄成功!\n");system("cls"); //清屏函數main_menu(); //登錄成功,打印主界面break;}}if (i == 5) //遍歷完一輪管理員信息,此時i=5且未找到符合的管理員信息,說明賬號密碼輸入錯誤{system("cls");printf("登錄失敗!\n\n");g++; //有三次登錄機會,每次登錄都遍歷一次user結構體if (g >= 3) //若三次機會都用完,則退出系統{printf("你已經輸錯三次,將自動退出系統\n");exit(1);}else{login(); //否則,登陸成功,進入主界面}} }void main_menu() //展示主菜單,并對用戶的請求做出對應響應 {read(); //將文件中的學生信息讀取到鏈表中system("cls"); //清屏函數int x;//主菜單printf("*************************************************\n");printf("*\t歡迎使用高校學生成績管理系統V2.0\t*\n");printf("*************************************************\n");printf("*\t\t1.輸入學生信息\t\t\t*\n");printf("*\t\t2.顯示學生信息\t\t\t*\n");printf("*\t\t3.查詢學生信息\t\t\t*\n");printf("*\t\t4.更新學生信息\t\t\t*\n");printf("*\t\t5.刪除學生信息\t\t\t*\n");printf("*\t\t6.計算學生成績\t\t\t*\n");printf("*\t\t7.保存\t\t\t\t*\n");printf("*\t\t8.退出系統\t\t\t*\n");printf("*************************************************\n");printf("請輸入你要執行的操作:");scanf("%d", &x);if (x == 1)input_record(); //輸入信息 if (x == 2)show_record(); //顯示信息 if (x == 3)search_record(); //查詢信息 if (x == 4)change_record(); //更新信息 if (x == 5)delete_record(); //刪除信息 if (x == 6)calc_record(); //計算成績 if (x == 7)save_record(); //保存if (x == 8)exit_record(); //退出else{printf("輸入錯誤,即將重新進入主界面\n");main_menu();} }void input_record() //輸入學生成績函數 1 {//定義兩個char類型變量來獲取用戶的輸入 char v, z;//在開頭位置做一個標記aa:{system("cls"); //清屏函數printf("請輸入學生姓名:");scanf("%s", s[student_number].name);printf("請輸入學生學號(五位):");scanf("%s", s[student_number].num);printf("請輸入學生性別(boy/girl):");scanf("%s", s[student_number].sex);printf("請輸入學生語文成績:");scanf("%d", &s[student_number].chinese);printf("請輸入學生數學成績:");scanf("%d", &s[student_number].mathematic);printf("請輸入學生英語成績:");scanf("%d", &s[student_number].english);printf("請輸入學生計算機成績:");scanf("%d", &s[student_number].computer);printf("請選擇是否保存(y或n):");scanf("%s", &z);if (z == 'y') //若輸入為y,則保存信息到文件中{student_number++;save_record();}printf("是否繼續添加,請選擇(y或n)(否會回到主界面):");scanf("%s", &v);if (v == 'y') //若輸入為y,則跳轉至開頭標記aa處{goto aa;}else{main_menu();}} }void show_record() //顯示學生信息函數 2 {system("cls"); //清屏函數int i, k, x;char get;x = student_number;print_table(); //打印表頭 for (i = 0; i < x; i++) //打印表格數據 {printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);}printf("\n1.返回主界面\n2.返回上一級\n");printf("請輸入:");scanf("%d", &k);if (k == 1){main_menu();}else if (k == 2){main_menu();}}void search_record() //查詢學生成績函數 3 {system("cls"); //清屏函數int x;//打印菜單printf("1 按學號查詢\n");printf("2 按姓名查詢\n");printf("3 按性別查詢\n");printf("4 返回上一級\n");printf("請輸入:");scanf("%d", &x);if (x == 1)search_by_num(); //按學號查詢函數 if (x == 2)search_by_name(); //按姓名查詢函數 if (x == 3)search_by_sex(); //按性別查詢查詢 if (x == 4)search_by_exit(); //返回主界面else{printf("輸入錯誤\n");search_record(); //重新查詢}}void print_table() //打印學生信息表格的表頭函數 {printf("+----------+----------+----------+------+------+------+------+\n");printf("| 姓名 | 學號 | 性別 | 語文 | 數學 | 英語 |計算機|\n");printf("+----------+----------+----------+------+------+------+------+\n"); }void search_by_num() //查詢學生信息函數的子函數——按學號查詢函數 {int i, k;char num1[max]; //用戶輸入學生學號system("cls"); //清屏函數printf("請輸入要查找的學號:");scanf("%s", num1);for (i = 0; i < student_number; i++) //遍歷鏈表,尋找是該學號是否存在{if (strcmp(num1, s[i].num) == 0){print_table();printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);break;}}if (i == student_number) //student_number為全局變量學生的人數{printf("不存在這個學號!\n\n");}printf("1.返回主界面\n2.繼續查詢\n");printf("請輸入:");scanf("%d", &k);if (k == 1){main_menu();}else{search_record();} }void search_by_name() //詢學生信息函數的子函數——按姓名查詢函數 {int i, k;char name1[max]; //用戶輸入學生姓名system("cls"); //清屏函數printf("請輸入查找的姓名:");scanf("%s", name1);for (i = 0; i < student_number; i++) //遍歷鏈表,看該名字是否存在{if (strcmp(name1, s[i].name) == 0){print_table();printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);break;}}if (i == student_number) {printf("不存在這個姓名\n");}printf("1.返回主界面\n2.繼續查詢\n");printf("請輸入:");scanf("%d", &k);if (k == 1){main_menu();}else{search_record();} }void search_by_sex() //詢學生信息函數的子函數——按性別查詢函數 {int i, k;char sex1[max]; //用戶輸入學生的性別system("cls"); //清屏函數printf("請輸入查找的性別(boy/girl):");scanf("%s", sex1);print_table(); //表格for (i = 0; i < student_number; i++) //遍歷鏈表,看該性別是否存在{if (strcmp(sex1, s[i].sex) == 0)printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);}if (i == student_number){printf("1.返回主界面\n2.繼續查詢\n");}printf("請輸入:");scanf("%d", &k);if (k == 1){main_menu();}else{search_record();} }void search_by_exit() //返回上一級(返回主菜單)的函數 {main_menu(); }void change_record() //更新學生成績函數 4 {//輸入學生學號修改學生信息并保持system("cls"); //清屏函數int i;char name2[max], sex2[max];int chinese2, mathematic2, english2, computer2;char numbefor[max];printf("請輸入要修改的學生的學號:"); //用戶輸入學生學號scanf("%s", numbefor);for (i = 0; i < student_number; i++) //遍歷鏈表,看該學號是否存在{if (strcmp(numbefor, s[i].num) == 0) //存在{printf("修改前:\n");print_table(); //打印表格printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);printf("請分別輸入修改后信息\n");printf("請輸入學生姓名:");scanf("%s", name2);printf("請輸入學生性別:");scanf("%s", sex2);printf("請輸入學生語文成績:");scanf("%d", &chinese2);printf("請輸入學生數學成績:");scanf("%d", &mathematic2);printf("請輸入學生英語成績:");scanf("%d", &english2);printf("請輸入學生計算機成績:");scanf("%d", &computer2);printf("請選擇是否保存(y或n):");getchar();if (getchar() == 'y') //修改學生信息{strcpy(s[i].name, name2);strcpy(s[i].sex, sex2);s[i].chinese = chinese2;s[i].mathematic = mathematic2;s[i].english = english2;s[i].computer = computer2;save_record(); //保存學生信息到文件中printf("修改后:\n");printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);printf("\n");}break;}}if (i == student_number){printf("很抱歉!沒有這位學生\n");}printf("是否繼續修改,請選擇(y/n):");getchar();if (getchar() == 'y'){change_record(); //繼續修改}else{main_menu(); //返回主界面} }void delete_record() //刪除學生信息函數 5 {//輸入學生學號刪除學生信息并保存 system("cls");char num4[max];char a;int v;printf("請輸入要刪學生的學號:\n");scanf("%s", num4);int i, j;for (i = 0; i < student_number; i++) //遍歷鏈表,看學號是否存在{if (strcmp(num4, s[i].num) == 0) //存在,執行刪除操作{printf("你將要刪除該學生信息\n");printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer);printf("\n");printf("y 確認刪除\tn 取消\n");printf("請輸入:");scanf("%s", &a);if (a == 'y'){for (j = i; j < student_number; j++) //將鏈表中該節點指向下一節點以實現刪除操作{strcpy(s[j].num, s[j + 1].num); strcpy(s[j].name, s[j + 1].name); strcpy(s[j].sex, s[j + 1].sex);s[j].chinese = s[j + 1].chinese; s[j].mathematic = s[j + 1].mathematic; s[j].english = s[j + 1].english;s[j].computer = s[j + 1].computer;}printf("刪除成功!\n");student_number--; //全局變量,student_number-1save_record(); //將刪除后的信息保存到文件中}else{printf("已取消操作\n");}}}if (i == student_number) //該學號不存在{printf("沒有這個學號的學生\n");}printf("1.繼續刪除 2.返回主界面\n");printf("請輸入:");scanf("%d", &v);if (v == 1){delete_record();}else{main_menu;} }void calc_record() //計算學生成績函數 6 {//有兩個功能,一個是計算總成績一個是計算平均分 system("cls"); //清屏函數int x;printf("1 計算總成績\n");printf("2 計算平均分\n");printf("3 返回上一級\n");printf("請輸入:");scanf("%d", &x);if (x == 1)calc_sum(); //計算總成績if (x == 2)calc_ave(); //計算平均成績if (x == 3)main_menu(); //返回主界面else{printf("輸入錯誤\n");calc_record(); //重新打印該界面} }void print_table_sum() //計算總成績函數的子函數——打印總成績表格的表頭 {printf("+----------+----------+----------+------+------+------+------+------+\n");printf("| 姓名 | 學號 | 性別 | 語文 | 數學 | 英語 |計算機|總成績|\n");printf("+----------+----------+----------+------+------+------+------+------+\n"); }void print_table_ave() //計算平均分函數的子函數——打印平均成績表格的表頭 {printf("+----------+----------+----------+------+------+------+------+------+\n");printf("| 姓名 | 學號 | 性別 | 語文 | 數學 | 英語 |計算機|平均分|\n");printf("+----------+----------+----------+------+------+------+------+------+\n"); }void calc_sum() //計算學生成績函數的子函數——計算總成績函數 {print_table_sum(); //打印表頭int i, k, sum = 0; //sum為學生的總成績int x = student_number; //student_number為學生人數for (i = 0; i < x; i++){sum = s[i].chinese + s[i].mathematic + s[i].english + s[i].computer;printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|%6d\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer, sum);}printf("1 返回上一級\n2 返回主界面\n ");printf("請輸入:");scanf("%d", &k);if (k == 1)calc_record();if (k == 2)main_menu();else{printf("輸入錯誤!\n");calc_record();} }void calc_ave() //計算學生成績函數的子函數——計算平均成績函數 {print_table_ave(); //打印表頭int i, k;int x = student_number; //student_number為學生人數float ave; //ave為學生平均成績for (i = 0; i < x; i++){ave = (s[i].chinese + s[i].mathematic + s[i].english + s[i].computer) * 0.25;printf("|%10s|%10s|%10s|%6d|%6d|%6d|%6d|%6.2f\n", s[i].name, s[i].num, s[i].sex, s[i].chinese, s[i].mathematic, s[i].english, s[i].computer, ave);if (i == 6){break;}}printf("1 返回上一級\n2 返回主界面\n ");printf("請輸入:");scanf("%d", &k);if (k == 1)calc_record();if (k == 2)main_menu();else{printf("輸入錯誤!\n");calc_record();} }void calc_eixt() //返回上一級(返回主菜單)函數 {main_menu(); }void save_record() //保存學生信息函數 7(將結構體數組學生數據寫入到文件中) {FILE* fp; //定義一個文件指針int i;//若文件打開失敗if ((fp = fopen("student-list", "wb")) == NULL) //以二進制方式對文件進行讀寫{printf("cannot open file\n");return;}fwrite(&student_number, 4, 1, fp); //將學生人數寫入文件for (i = 0; i < student_number; i++) //二進制寫{if (fwrite(&s[i], sizeof(struct student), 1, fp) != 1){printf("file write error\n"); //出錯處理}else{printf("file write sucess\n"); //文件寫入成功}}fclose(fp); //關閉文件指針 }void read() //將文件中的數據讀入到結構體數組中 {FILE* fp; //定義一個文件指針int i;//若文件打開失敗if ((fp = fopen("student-list", "rb")) == NULL) //以二進制方式讀取文件{printf("cannot open file\n");return;}fread(&student_number, 4, 1, fp); //讀取學生人數for (i = 0; i < student_number; i++) //二進制寫{if (fread(&s[i], sizeof(struct student), 1, fp) != 1){printf("file read error\n"); //出錯處理}else{printf("file read sucess\n"); //文件讀取成功}}fclose(fp); //關閉文件指針 }void exit_record() //退出系統函數 8 {printf("感謝您的使用,已退出!");exit; }

總結

以上是生活随笔為你收集整理的学生信息管理系统(C语言,带文件操作)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。