C語言實現(xiàn)學(xué)生信息管理系統(tǒng)
更新時間:2022年07月22日 17:10:19 作者:心事付流年
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //數(shù)據(jù)的設(shè)計------->學(xué)生信息抽象出 struct student { ?? ?char name[20]; ?? ?int age; ?? ?char sex[5]; ?? ?char tel[20]; }; //結(jié)構(gòu)分結(jié)構(gòu)去寫 //某一種數(shù)據(jù)結(jié)構(gòu)去實現(xiàn)什么東西的時候,單獨去寫一種數(shù)據(jù)結(jié)構(gòu) //先把數(shù)據(jù)結(jié)構(gòu)寫對了再說 struct Node { ?? ?//int data; ?? ?struct student data; ?? ?struct Node* next; }; //創(chuàng)建表 struct Node* createList() { ?? ?//用結(jié)構(gòu)體變量表示表頭 ?? ?//指針-->變量 ? 動態(tài)內(nèi)存申請 ?? ?struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); ?? ?//表頭:做差異化處理 數(shù)據(jù)data不做初始化 ?? ?headNode->next = NULL; ?? ?return headNode; } struct Node* createNode(struct student data) { ?? ?struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); ?? ?newNode->data = data; ?? ?newNode->next = NULL; ?? ?return newNode; } //插入結(jié)點 void insertNodeByHead(struct Node* headNode, struct student data) { ?? ?struct Node* newNode = createNode(data); ?? ?//表頭法 ?? ?newNode->next = headNode->next; ?? ?headNode->next = newNode; } //指定位置刪除 //data為struct student型,結(jié)構(gòu)體,不能直接比較 void deleteAPPoinNode(struct Node* headNode, char* name)//指定姓名進(jìn)行刪除 { ?? ?struct Node* posNode = headNode->next; ?? ?struct Node* posFrontNode = headNode; ?? ?if (posNode == NULL) ?? ?{ ?? ??? ?printf("數(shù)據(jù)為空,無法刪除!\n"); ?? ??? ?return; ?? ?} ?? ?//姓名為字符串,不能直接比較,字符串的比較為strcmp ?? ?while (strcmp(posNode->data.name,name)) ?? ?{ ?? ??? ?posFrontNode = posNode; ?? ??? ?posNode = posFrontNode->next; ?? ??? ?if (posNode == NULL) ?? ??? ?{ ?? ??? ??? ?printf("未找到指定位置,無法刪除!\n"); ?? ??? ??? ?return; ?? ??? ?} ?? ?} ?? ?//找到了 ?? ?posFrontNode->next = posNode->next; ?? ?free(posNode); } //查找功能 struct Node* searchInfoByData(struct Node* headNode,char* name)//指定姓名查找 { ?? ?struct Node* pMove = headNode->next; ?? ?while (pMove != NULL && strcmp(pMove->data.name, name)) ?? ?{ ?? ??? ?pMove = pMove->next; ?? ?} ?? ?return pMove; } //文件讀操作(鏈表的存儲) void readInfoFromFile(struct Node* headNode,const 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/*文件結(jié)束符*/)//將文件作為輸入設(shè)備,格式化讀到data中 ?? ?{ ?? ??? ?insertNodeByHead(headNode, data);//讀過程中存放到鏈表 ?? ?} ?? ?//3.關(guān)閉文件 ?? ?fclose(fp); } //文件寫操作(鏈表的讀?。? void writeInfoToFile(struct Node* headNode,const char *fileName) { ?? ?FILE *fp; ?? ?fp = fopen(fileName, "w");//以追加方式打開 ?? ?if (fp == NULL) ?? ?{ ?? ??? ?printf("文件打開失?。?); ?? ??? ?return; ?? ?} ?? ?struct Node* pMove = headNode->next; ?? ?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; ?? ?} ?? ?fclose(fp); } //打印鏈表 void printfList(struct Node* headNode) { ?? ?struct Node* pMove = headNode->next; ?? ?//涉及到數(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"); } /* ?? ?1.界面 ?? ?2.數(shù)據(jù)結(jié)構(gòu)的設(shè)計 ?? ??? ?//需要和數(shù)據(jù)結(jié)構(gòu)設(shè)計糅合在一起 ?? ?3.交互 */ #include "myList.h" //菜單設(shè)計 void menu() { ?? ?//所有操作都同步到文件 ?? ?printf("-----------【學(xué)生信息管理系統(tǒng)】-----------\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 = createList(); //用戶的交互 //根據(jù)所選菜單項,做相應(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");//插入鏈表 ?? ??? ?printf("請輸入學(xué)生姓名年齡性別電話:"); ?? ??? ??? ?fflush(stdin);//清空緩沖區(qū) ?? ??? ??? ?scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel); ?? ??? ?insertNodeByHead(list, data); ?? ??? ?break; ?? ?case 2: ?? ??? ?printf("---------------【瀏覽信息】--------------\n");//打印鏈表 ?? ??? ?printfList(list); ?? ??? ?break; ?? ?case 3: ?? ??? ?printf("---------------【修改信息】---------------\n"); ?? ??? ?printf("需要修改信息的學(xué)生姓名:"); ?? ??? ?scanf("%s", data.name); ?? ??? ?deleteAPPoinNode(list, data.name); ?? ??? ?printf("請重新輸入學(xué)生信息:"); ?? ??? ?fflush(stdin); ?? ??? ?scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel); ?? ??? ?insertNodeByHead(list, data); ?? ??? ?break; ?? ?case 4: ?? ??? ?printf("---------------【刪除信息】---------------\n"); ?? ??? ?printf("請輸入刪除的學(xué)生姓名:"); ?? ??? ?scanf("%s", data.name); ?? ??? ?deleteAPPoinNode(list,data.name); ?? ??? ?break; ?? ?case 5: ?? ??? ?printf("---------------【查找信息】---------------\n"); ?? ??? ?printf("請輸入要查找學(xué)生姓名:"); ?? ??? ?scanf("%s", data.name); ?? ??? ?pMove = searchInfoByData(list, data.name); ?? ??? ?if (pMove == NULL) ?? ??? ?{ ?? ??? ??? ?printf("未找到相關(guān)信息,無法刪除!\n"); ?? ??? ??? ?system("pause"); ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?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");//保存,調(diào)用文件寫函數(shù) } int main() { ?? ?readInfoFromFile(list, "1.txt");//程序運行前,調(diào)用文件讀函數(shù) ?? ?while (1) ?? ?{ ?? ??? ?menu(); ?? ??? ?keyDown(); ?? ??? ?system("pause"); ?? ??? ?system("cls"); ?? ?} ?? ?/*測試鏈表代碼 ?? ?struct Node* list = createList(); ?? ?insertNodeByHead(list, 1); ?? ?insertNodeByHead(list, 3); ?? ?insertNodeByHead(list, 2); ?? ?insertNodeByHead(list, 5); ?? ?printfList(list); ?? ?printf("刪除指定位置!\n"); ?? ?deleteAPPoinNode(list, 3); ?? ?printfList(list); ?? ?printf("鏈表的查找:\n"); ?? ?printf("%d\n",searchInfoByData(list, 5)->data);*/ ?? ?system("pause"); ?? ?return 0; }
運行截圖
1.錄入信息
2.瀏覽信息
3.修改信息
4.查找信息
5.刪除信息
6.退出系統(tǒng)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 學(xué)生信息管理系統(tǒng)C語言版
- C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
- C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計
- C語言單鏈表版學(xué)生信息管理系統(tǒng)
- C語言學(xué)生信息管理系統(tǒng)設(shè)計與實現(xiàn)
- C語言版學(xué)生信息管理系統(tǒng)
- C語言學(xué)生信息管理系統(tǒng)小項目
- C語言數(shù)組實現(xiàn)學(xué)生信息管理系統(tǒng)設(shè)計
- C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)
- C語言使用鏈表實現(xiàn)學(xué)生信息管理系統(tǒng)
相關(guān)文章
C++20 特性 協(xié)程 Coroutines(1)
這篇文章主要給大家分享得是C++20 得特性 協(xié)程 Coroutines,下面文章內(nèi)容我們將來具體介紹什么是協(xié)程,協(xié)程得好處等知識點,需要的朋友可以參考一下2021-10-10