基于C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)
更新時間:2022年03月31日 17:02:30 作者:summery456
這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
1.目標(biāo)要求:
1.學(xué)生成績管理系統(tǒng)
2.可增、刪、改、查、瀏覽
3.數(shù)據(jù)保存在文件中
2.C語言代碼:
文件1:源文件
#include"mylist.h" //菜單設(shè)計(jì)? void menu(){ ?? ?//所有文件都同步到文件? ?? ?printf("-------------【學(xué)生管理信息】-------------------\n"); ?? ?printf("\t\t0.退出系統(tǒng)\n"); ?? ?printf("\t\t1.錄入信息\n"); ?? ?printf("\t\t2.瀏覽信息\n"); ?? ?printf("\t\t3.修改信息\n"); ?? ?printf("\t\t4.刪除信息\n"); ?? ?printf("\t\t5.查找信息\n"); ?? ?printf("------------------------------------------------\n"); ?? ? } struct Node* list; //用戶的交互 //根據(jù)所選的菜單項(xiàng),作相應(yīng)的事情? void keyDown(){ ?? ? ?? ?int choice = 0; ?? ?struct student data; ?? ?struct Node* pMove = NULL; ?? ?scanf("%d",&choice); ?? ?switch(choice){ ?? ??? ?case 0: ?? ??? ??? ?printf("正常退出!\n"); ?? ??? ??? ?system("pause"); ?? ??? ??? ?exit(0); ?? ??? ??? ?break; ?? ??? ?case 1: ?? ??? ??? ?printf("-------------錄入信息-------------------\n"); ?? ??? ??? ?//插入鏈表? ?? ??? ??? ?fflush(stdin);?? ?//清空緩沖區(qū)!?。。。。。。。? ?? ??? ??? ?printf("請輸入學(xué)生的\n姓名、年齡、性別、電話:\n"); ?? ??? ??? ?scanf("%s%d%s%s",data.name,&data.age,data.sex,data.tel); ?? ??? ??? ?insertNodeByHead(list,data);? ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?printf("-------------瀏覽信息-------------------\n"); ?? ??? ??? ?printList(list);?? ?//打印鏈表 ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?printf("-------------修改信息-------------------\n"); ?? ??? ??? ?printf("請輸入要修改信息的學(xué)生姓名:"); ?? ??? ??? ?scanf("%s",data.name); ?? ??? ??? ?reviseInfoByData(list,data.name);? ?? ??? ??? ?break; ?? ??? ?case 4: ?? ??? ??? ?printf("-------------刪除信息-------------------\n"); ?? ??? ??? ?printf("請輸入刪除學(xué)生的姓名:"); ?? ??? ??? ?scanf("%s",data.name); ?? ??? ??? ?deleteNode(list,data.name); ?? ??? ??? ?break; ?? ??? ?case 5: ?? ??? ??? ?printf("-------------查找信息-------------------\n"); ?? ??? ??? ?printf("請輸入要查找學(xué)生的姓名:"); ?? ??? ??? ?scanf("%s",data.name); ?? ??? ??? ?if( pMove = searchInfoByData(list,data.name)){ ?? ??? ??? ??? ?printf("姓名\t年齡\t性別\t電話\n");? ?? ??? ??? ??? ?printf("%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel); ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("選擇錯誤,重新輸入\n"); ?? ??? ??? ?system("pause"); ?? ??? ??? ?break;? ?? ?} ?? ?writeInfoToFile(list,"1.txt"); }? int main(){ ?? ?list = createList(); ?? ?readInfoFromFile(list,"1.txt"); ?? ?while(1){ ?? ??? ? ?? ??? ?menu(); ?? ??? ?keyDown(); ?? ??? ?system("pause"); ?? ??? ?system("cls"); ?? ?}? ?? ?system("pause"); ?? ?return 0; }
文件2:mylist.h
#include<stdio.h> #include<stdlib.h>? #include<string.h>? //數(shù)據(jù)的設(shè)計(jì)-----》學(xué)生信息抽象出 struct student{ ?? ?char name[20]; ?? ?int age; ?? ?char sex[5]; ?? ?char tel[20]; ?? ? //?? ?int math; //?? ?int english; };//結(jié)構(gòu) //測試的結(jié)構(gòu)? struct Node{ ?? ?struct student data; ?? ?struct Node* next; };? //創(chuàng)建表頭? struct Node* createList(){ ?? ?struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); ?? ?headNode->next = NULL; ?? ?return headNode; } //創(chuàng)建節(jié)點(diǎn)? struct Node* createNode(struct student data){ ?? ?struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); ?? ?newNode->data = data; ?? ?newNode->next = NULL; ?? ?return newNode; }? //插入結(jié)點(diǎn)(表頭法) void insertNodeByHead(struct Node* headNode, struct student data){ ?? ?struct Node* newNode = createNode(data); ?? ?newNode->next = headNode->next;? ?? ?headNode->next = newNode; } //指定位置刪除 void deleteNode(struct Node* headNode,char* name){ ?? ?struct Node* posFrontNode; ?? ?struct Node* posNode; ?? ?if(headNode->next == NULL){ ?? ??? ?printf("鏈表為空!\n"); ?? ??? ?return;? ?? ?} ?? ?posFrontNode = headNode; ?? ?posNode = headNode->next; ?? ?while(posNode && strcmp(posNode->data.name,name)){ ?? ??? ?posFrontNode = posNode; ?? ??? ?posNode = posFrontNode->next; ?? ?} ?? ?if(!posNode){ ?? ??? ?printf("您要刪除的數(shù)據(jù)不存在!\n");? ?? ??? ?return; ?? ?} ?? ?if(!strcmp(posNode->data.name,name)){ ?? ??? ?posFrontNode->next = posNode->next; ?? ??? ?free(posNode); ?? ?} }? //查找功能 struct Node* searchInfoByData(struct Node* headNode,char* name) { ?? ?struct Node* posNode; ?? ?if(headNode->next == NULL){ ?? ??? ?printf("鏈表為空!\n"); ?? ??? ?return NULL;? ?? ?} ?? ?posNode = headNode->next; ?? ?while(posNode && strcmp(posNode->data.name,name)){; ?? ??? ?posNode = posNode->next; ?? ?} ?? ?if(!posNode){ ?? ??? ?printf("您要查找的數(shù)據(jù)不存在!\n");? ?? ??? ?return NULL; ?? ?} ?? ?return posNode;? } //修改功能 void reviseInfoByData(struct Node* headNode,char* name) { ?? ?struct Node* posNode; ?? ?if(headNode->next == NULL){ ?? ??? ?printf("鏈表為空!\n"); ?? ??? ?return;? ?? ?} ?? ?posNode = headNode->next; ?? ?while(posNode && strcmp(posNode->data.name,name)){; ?? ??? ?posNode = posNode->next; ?? ?} ?? ?if(!posNode){ ?? ??? ?printf("您要修改的數(shù)據(jù)不存在!\n");? ?? ??? ?return; ?? ?} ?? ?printf("請輸入學(xué)生[%s]的年齡、性別、電話:\n",posNode->data.name); ?? ?scanf("%d%s%s",&posNode->data.age,posNode->data.sex,posNode->data.tel); } //文件讀操作 void readInfoFromFile(struct Node* headNode,char* fileName){ ?? ?//1.打開文件 ?? ?FILE *fp; ?? ?struct student data; ?? ?fp = fopen(fileName,"r"); ?? ?if(fp == NULL){ ?? ??? ?fopen(fileName,"w+");//打開文件具有創(chuàng)建功能? ?? ?} ?? ?//2.讀文件? ?? ?while(fscanf(fp,"%s\t%d\t%s\t%s\n",data.name,&data.age,data.sex,data.tel)!=EOF){ ?? ??? ?insertNodeByHead(headNode,data);? ?? ?} ?? ?//3.關(guān)閉文件 ?? ?fclose(fp); } //文件寫操作 void writeInfoToFile(struct Node* headNode,char* fileName){ ?? ?//1.打開文件 ?? ?FILE *fp; ?? ?fp = fopen(fileName,"w"); ?? ?struct Node* pMove = headNode->next; ?? ? ?? ?//2.寫文件? ?? ?while(pMove){ ?? ??? ?fprintf(fp,"%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel); ?? ??? ?pMove = pMove->next; ?? ?} ?? ?//3.關(guān)閉文件 ?? ?fclose(fp); } //打印鏈表 void printList(struct Node* headNode){ ?? ?struct Node* pMove = headNode->next; ?? ?//設(shè)計(jì)列數(shù)據(jù)的處理 ?? ?printf("姓名\t年齡\t性別\t電話\n");? ?? ?while(pMove){ ?? ??? ?printf("%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel); ?? ??? ?pMove = pMove->next; ?? ?} ?? ?printf("\n"); }
3.運(yùn)行結(jié)果:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- C語言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng)
- c語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)詳解
- C語言實(shí)現(xiàn)班級學(xué)生管理系統(tǒng)
- C語言不用鏈表完成學(xué)生管理系統(tǒng)(完整代碼)
- C語言單鏈表實(shí)現(xiàn)學(xué)生管理系統(tǒng)
- C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)
- C語言鏈表實(shí)現(xiàn)學(xué)生管理系統(tǒng)
- C語言實(shí)現(xiàn)簡單學(xué)生管理系統(tǒng)
- C語言學(xué)生管理系統(tǒng)源碼分享
- C語言實(shí)現(xiàn)簡易學(xué)生管理系統(tǒng)
相關(guān)文章
C/C++中的sizeof運(yùn)算符和size_t類型的詳解
今天小編就為大家分享一篇關(guān)于C/C++中的sizeof運(yùn)算符和size_t類型的詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Qt+QListWidget實(shí)現(xiàn)氣泡聊天界面(附源碼)
由于最近的項(xiàng)目需要,做了些相關(guān)IM的工作。所以聊天框也是必不可少的一部分。本文以QListWidget+QPainter繪制的Item做了一個Demo。該Demo只是做一個示例,感興趣的可以了解一下2022-12-12C語言實(shí)現(xiàn)順序表的基本操作指南(注釋很詳細(xì))
線性表是最簡單的數(shù)據(jù)結(jié)構(gòu),而順序表又是最簡單的線性表,其基本思想是用一段地址連續(xù)的儲存單元依次存儲線性表的數(shù)據(jù)元素,下面這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)順序表的基本操作,需要的朋友可以參考下2021-10-10