c語言實現(xiàn)學(xué)生管理系統(tǒng)詳解
更新時間:2021年12月19日 17:00:11 作者:如風(fēng)暖陽
這篇文章主要為大家介紹了c語言實現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
該學(xué)生管理系統(tǒng)的實現(xiàn)是通過分文件的方式來寫的,infor.h 文件為頭文件,源文件infor.c實現(xiàn)源文件test.c中封裝函數(shù),建議 讀者在做較大的系統(tǒng)是分文件來實現(xiàn),可以提高代碼的運(yùn)行效率。 (該學(xué)生管理系統(tǒng)由b站鵬哥c語言通訊錄視頻改進(jìn)而來)
infor.h
//頭文件 實現(xiàn)引用函數(shù)頭文件,定義常量,以及源文件中封裝函數(shù)的聲明
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<stdlib.h> #include <windows.h> #define MAX_NAME 20 //都用define定義 為了后期的可改性 #define MAX_SEX 10 #define MAX_TELE 15 #define MAX_ADDR 30 #define begin 3 //初始開辟動態(tài)內(nèi)存容量 #define add 2 //每次容滿后增容數(shù)量 //#define MAX 1000 typedef struct Student //定義學(xué)生信息結(jié)構(gòu)體變量 { char name[MAX_NAME]; char sex[MAX_SEX]; int age; char tele[MAX_TELE]; char addr[MAX_ADDR]; }Student; //typedef struct student //結(jié)構(gòu)體套結(jié)構(gòu)體 //{ // Student data[MAX]; //存放添加進(jìn)來的個人信息 // int sz; //記錄當(dāng)前系統(tǒng)中有效信息個數(shù) //}student; typedef struct student //結(jié)構(gòu)體嵌套結(jié)構(gòu)體 { Student*data; //指向動態(tài)申請空間,用來存放個人信息 int sz; //記錄當(dāng)前系統(tǒng)中有效信息個數(shù) int capacity; //記錄當(dāng)前通訊錄最大容量 }student; void Initstudent(student*pc);//初始化結(jié)構(gòu)體 void ADDstudent(student* pc);//增加學(xué)生信息 void PRINTstudent(student* pc);//瀏覽學(xué)生信息 void SEARCHstudent(student* pc);//查找學(xué)生信息 void MODIFYstudent(student* pc);//修改學(xué)生信息 void DELETEstudent(student* pc);//刪除學(xué)生信息 void DESETORYstudent(student* pc);//銷毀學(xué)生信息
test.c
//主文件的測試 該文件為實現(xiàn)學(xué)生管理系統(tǒng)的核心
#define _CRT_SECURE_NO_WARNINGS 1 #include"infor.h" //注意分文件寫時 源文件中都需要引用頭文件 void menu() { system("color fc"); printf("\n"); printf("\n"); printf("\n"); printf(" ***********鄭州輕工業(yè)大學(xué)學(xué)生信息管理系統(tǒng)************\n"); printf(" *-------0.退出 1.增加學(xué)生信息-------*\n"); printf(" *-------2.瀏覽學(xué)生信息 3.查找學(xué)生信息-------*\n"); printf(" *-------4.修改學(xué)生信息 5.刪除學(xué)生信息-------*\n"); printf(" *****************************************************\n"); printf("\n"); printf("\n"); printf("\n"); } enum option { //通過枚舉常量,使得主函數(shù)中的switch語句更明了的實現(xiàn)不同的功能 EXIT, ADD, PRINT, SEARCH, MODIFY, Delete }; int main() { int input = 0; student stu; Initstudent(&stu); //結(jié)構(gòu)體數(shù)組的初始化 do { menu(); printf("請選擇:>\n"); scanf("%d", &input); switch(input) //封裝多個函數(shù)實現(xiàn)多個功能 { //函數(shù)的聲明位于頭文件中,實現(xiàn)在infor.c中實現(xiàn) case EXIT: DESETORYstudent(&stu); printf("退出系統(tǒng)\n"); break; case ADD: ADDstudent(&stu); break; case PRINT: PRINTstudent(&stu); break; case SEARCH: SEARCHstudent(&stu); break; case MODIFY: MODIFYstudent(&stu); break; case Delete: DELETEstudent(&stu); break; default: printf("選擇錯誤,重新選擇\n"); break; } } while (input); return 0; }
infor.c
//該文件為test.c中封裝函數(shù)的實現(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1 #include"infor.h" //靜態(tài) //void Initstudent(student* pc) //{ // pc->sz = 0; // memset(pc->data, 0, sizeof(pc->data));//memset()內(nèi)存設(shè)置 使整個結(jié)構(gòu)體數(shù)組初始化 //} //動態(tài) void Initstudent(student* pc) { //指針data維護(hù)開辟的動態(tài)內(nèi)存空間 calloc初始化開辟空間 pc->data = (Student*)calloc(begin,sizeof(Student)); pc->sz = 0; //sz為有效信息個數(shù) pc->capacity = begin; //定義目前容量為初始容量 } void ADDstudent(student* pc) { if (pc->sz == pc->capacity) //容量滿了完成增容 { Student* ptr = (Student*)realloc(pc->data, (pc->capacity + add)*sizeof(Student)); if (ptr != NULL) { pc->data = ptr; pc->capacity += add; printf("~~~增容成功~~~\n"); } else { perror("ADDstudent");//失敗報錯 printf("增加聯(lián)系人失敗\n"); return; } } //增加一個人的信息 printf("請輸入姓名:\n"); scanf("%s", pc->data[pc->sz].name); printf("請輸入性別:\n"); scanf("%s", pc->data[pc->sz].sex); printf("請輸入年齡:\n"); scanf("%d", &(pc->data[pc->sz].age)); printf("請輸入電話:\n"); scanf("%s", pc->data[pc->sz].tele); printf("請輸入地址:\n"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("增加成功\n"); } void DESETORYstudent(student* pc) //銷毀個人信息 { free(pc->data); //釋放內(nèi)存 pc->data = NULL; //回歸為0 pc->capacity = 0; pc->sz = 0; } //void ADDstudent(student* pc) //{ // if (pc->sz == MAX) // { // printf("通訊錄已滿,無法添加\n"); // return; // } // //增加一個人的信息 // printf("請輸入姓名:\n"); // scanf("%s", pc->data[pc->sz].name); // printf("請輸入性別:\n"); // scanf("%s", pc->data[pc->sz].sex); // printf("請輸入年齡:\n"); // scanf("%d", &(pc->data[pc->sz].age)); // printf("請輸入電話:\n"); // scanf("%s", pc->data[pc->sz].tele); // printf("請輸入地址:\n"); // scanf("%s", pc->data[pc->sz].addr); // pc->sz++; // printf("增加成功\n"); //} void PRINTstudent(student* pc) { int i = 0; printf("%-10s%-10s%-10s%-15s%-30s\n", "姓名", "性別", "年齡", "電話", "地址"); for (i = 0; i < pc->sz; i++) { printf("%-10s%-10s%-10d%-15s%-30s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr ); } } static int Findbyname(student* pc, char name[]) //通過名字來查找學(xué)生 stadic靜態(tài)局部變量 該函數(shù)只在本文件中應(yīng)用 保護(hù)該函數(shù) { int i = 0; for (i = 0; i < pc->sz; i++) { if (strcmp(pc->data[i].name, name) == 0) //利用strcmp函數(shù)的返回值判斷是否找到了該人 { return i; //找到了就返回學(xué)生信息的角標(biāo) } } return -1; //沒找到 } void SEARCHstudent(student* pc) { char name[MAX_NAME] = { 0 }; printf("請輸入要查找學(xué)生姓名:\n"); scanf("%s", name); int end = Findbyname(pc, name); if (end == -1) { printf("你所要查找的人不存在"); } else { printf("%-10s%-10s%-10s%-15s%-30s\n", "姓名", "性別", "年齡", "電話", "地址"); printf("%-10s%-10s%-10d%-15s%-30s\n", //Findbuname函數(shù)如果找到對應(yīng)學(xué)生,返回對應(yīng)下標(biāo),輸出對應(yīng)下標(biāo)學(xué)生信息 pc->data[end].name, pc->data[end].sex, pc->data[end].age, pc->data[end].tele, pc->data[end].addr ); } } void MODIFYstudent(student* pc) { char name[MAX_NAME] = { 0 }; printf("請輸入要修改學(xué)生信息的學(xué)生姓名:\n"); scanf("%s", name); int end = Findbyname(pc, name); if (end == -1) { printf("你所要修改學(xué)生信息的人不存在"); } else { printf("請輸入性別:\n"); scanf("%s", pc->data[end].sex); printf("請輸入年齡:\n"); scanf("%d", &(pc->data[end].age)); printf("請輸入電話:\n"); scanf("%s", pc->data[end].tele); printf("請輸入地址:\n"); scanf("%s", pc->data[end].addr); printf("修改成功\n"); } } void DELETEstudent(student* pc) { char name[MAX_NAME] = { 0 }; printf("請輸入要刪除學(xué)生信息的學(xué)生姓名:\n"); scanf("%s", name); int end = Findbyname(pc, name); if (end == -1) { printf("你所要刪除學(xué)生信息的人不存在"); } int i = 0; for (i = end; i < pc->sz - 1; i++) { pc->data[i] = pc->data[i + 1]; } pc->sz--; printf("刪除成功"); }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
您可能感興趣的文章:
- C語言結(jié)構(gòu)體鏈表和指針實現(xiàn)學(xué)生管理系統(tǒng)
- 基于C語言實現(xiàn)學(xué)生管理系統(tǒng)
- C語言實現(xiàn)班級學(xué)生管理系統(tǒng)
- C語言不用鏈表完成學(xué)生管理系統(tǒng)(完整代碼)
- C語言單鏈表實現(xiàn)學(xué)生管理系統(tǒng)
- C語言實現(xiàn)學(xué)生管理系統(tǒng)
- C語言鏈表實現(xiàn)學(xué)生管理系統(tǒng)
- C語言實現(xiàn)簡單學(xué)生管理系統(tǒng)
- C語言學(xué)生管理系統(tǒng)源碼分享
- C語言實現(xiàn)簡易學(xué)生管理系統(tǒng)
相關(guān)文章
C++實現(xiàn)LeetCode(768.可排序的最大塊數(shù)之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(768.可排序的最大塊數(shù)之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07深入C++四種強(qiáng)制類型轉(zhuǎn)換的總結(jié)
本篇文章是對C++中四種強(qiáng)制類型轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言實現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)
楊輝三角是中國古代數(shù)學(xué)的杰出研究成果之一,它把二項式系數(shù)圖形化,把組合數(shù)內(nèi)在的一些代數(shù)性質(zhì)直觀地從圖形中體現(xiàn)出來,是一種離散型的數(shù)與形的結(jié)合。本文將介紹三種可以實現(xiàn)打印楊輝三角的辦法,感興趣的可以試一試2022-01-01