C語言使用鏈表實現學生籍貫管理系統
本文實例為大傢分享瞭C語言用鏈表實現學生籍貫管理系統的具體代碼,供大傢參考,具體內容如下
源碼
#include<stdio.h> #include<stdlib.h> #include<string.h> //定義一個學生結構體 typedef struct student { char no[12]; //學號 char name[40]; //姓名 char tele[20]; //電話號碼 int D[18]; //電話號碼碼 char jg[60]; //籍貫 char addr[80]; //通訊地址 struct student* next; //指向下一節點的指針 }STU; //函數聲明放在這裡 STU* LIstInit(STU* L); STU* ListCreate(STU* L, int n); void ListInsert(STU* L); void ListDelete(STU* L, char n[40]); void LIstSearch(STU* L, char n[]); void input(STU* p, int i); void output(STU* L); void menu(); //創建表頭,初始化鏈表 STU* LIstInit(STU* L) { STU* head = NULL; head = (STU*)malloc(sizeof(STU)); head->next = NULL; L = head; return L; } //創建鏈表,將新生成的節點插入到鏈表的表頭 STU* ListCreate(STU* L, int n) { int i; for (i = 0; i < n; i++) { STU* p; //將新生成的節點插入到鏈表中 p = NULL; p = (STU*)malloc(sizeof(STU)); input(p, i); p->next = L->next; L->next = p; } return L; } //對鏈表進行節點的插入操作 void ListInsert(STU* L) { STU* s = NULL; //生成一個新節點s s = (STU*)malloc(sizeof(STU)); printf("請輸入您要插入的學生的學號:"); scanf("%s", &s->no); printf("請輸入您要插入的學生的姓名:"); scanf("%s", &s->name); printf("請輸入您要插入的學生的電話號碼:"); scanf("%s", &s->tele); printf("請輸入您要插入的學生的身份證號碼:"); scanf("%s", &s->D); printf("請輸入您要插入的學生的籍貫:"); scanf("%s", &s->jg); printf("請輸入您要插入的學生的通訊地址:"); scanf("%s", &s->addr); s->next = L->next; L->next = s; } //對鏈表的進行節點的刪除操作 void ListDelete(STU* L, char n[]) { STU* p = L->next, * pre = L; //定義p指針指向頭節點的指向,定義pre指向頭節點,pre始終指向p的前驅節點 if (p == NULL) printf("數據為空,無法刪除!"); else { while (strcmp(p->name, n) != 0) { pre = p; p = pre->next; if (p == NULL) { printf("沒有找到相關信息,無法刪除\n"); return; } } pre->next = p->next; free(p); printf("刪除成功"); } } void LIstSearch(STU* L, char n[]) { STU* p = L->next; if (p == NULL) printf("數據為空,無法查找!"); else { while (strcmp(p->name, n) != 0) { p = p->next; if (p == NULL) { printf("沒有找到相關信息\n"); return; } } printf("該學生的籍貫為:\n"); printf("\t%s\n", p->jg); } } void ListModify(STU* L, char na[]) { char JG[60]; STU* p = L->next; while (p != NULL) { if (strcmp(p->name, na) == 0) { printf("請選擇您修改後的學生籍貫:\n"); scanf("%s", &JG); strcpy(p->jg, JG); break; } p = p->next; } } void input(STU* p, int i) { printf("請輸入第%d名學生的學號:", i + 1); scanf("%s", &p->no); printf("請輸入第%d名學生的姓名:", i + 1); scanf("%s", &p->name); printf("請輸入第%d名學生的電話號碼:", i + 1); scanf("%s", &p->tele); printf("請輸入第%d名學生的身份證號碼:", i + 1); scanf("%s", &p->D); printf("請輸入第%d名學生的籍貫:", i + 1); scanf("%s", &p->jg); printf("請輸入第%d名學生的通訊地址:", i + 1); scanf("%s", &p->addr); } void output(STU* L) { STU* p = L->next; while (p != NULL) { printf("%s\t", p->no); printf("%s\t", p->name); printf("\t%s", p->tele); printf("\t\t%s", p->D); printf("\t%s", p->jg); printf("\t%s", p->addr); printf("\n"); p = p->next; } } void PrintFile(STU* L) { STU* p = L->next; FILE* fp; fp = fopen("student.txt", "w"); fprintf(fp, "學號\t\t姓名\t\t電話號碼\t\t身份證號碼\t\t籍貫\t\t通訊地址\n"); while (p != NULL) { fprintf(fp, "%s\t", p->no); fprintf(fp, "%s\t", p->name); fprintf(fp, "\t%s", p->tele); fprintf(fp, "\t%s", p->D); fprintf(fp, "\t%s", p->jg); fprintf(fp, "\t\t%s", p->addr); fprintf(fp, "\n"); p = p->next; } printf("保存成功,請到當前目錄下的student.txt文件中查看"); fclose(fp); } void menu() { printf("\n\n"); printf("\t\t\t===================學試報名管理系統===================\n"); printf("\t\t\t* 作者:XXX 班級:XXXXXXXX 學號:XXXXXXXXXXXXXXX *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 1>. 錄入學生的相關信息 *\n"); printf("\t\t\t* 2>. 全部學生的相關信息 *\n"); printf("\t\t\t* 3>. 查找某個就學生的籍貫 *\n"); printf("\t\t\t* 4>. 修改某個學生的籍貫 *\n"); printf("\t\t\t* 5>. 刪除某個學生的相關信息 *\n"); printf("\t\t\t* 6>. 插入某個學生的相關信息 *\n"); printf("\t\t\t* 7>. 保存學生信息 *\n"); printf("\t\t\t* 0>. 退出管理系統 *\n"); printf("\t\t\t* 歡迎使用本系統!*\n"); printf("\t\t\t=====================================================\n"); printf("\t\t\t輸入選項,按回車進入選項: \n"); } int main() { int item, n; //item用於接收輸入的命令,n用於接收輸入的學生人數 char nam[30]; STU* L = NULL; L = LIstInit(L); do { menu(); printf("請輸入相應的數字,進行相應的操作:\n"); scanf("%d", &item); switch (item) { case 1: printf("請輸入您要錄入的學生人數:"); scanf("%d", &n); L = ListCreate(L, n); break; case 2: printf("全部學生信息如下:\n"); printf("學號\t\t姓名\t\t電話號碼\t\t身份證號碼\t\t籍貫\t\t通訊地址\n"); output(L); break; case 3: printf("請輸入您要查找的學生姓名:"); scanf("%s", nam); LIstSearch(L, nam); break; case 4: printf("請輸入您要修改的學生姓名:"); scanf("%s", nam); ListModify(L, nam); break; case 5: printf("請輸入您要刪除的學生的姓名:"); scanf("%s", nam); ListDelete(L, nam); break; case 6: ListInsert(L); break; case 7: PrintFile(L); break; case 0: printf("即將退出學生籍貫管理系統....."); exit(0); default: break; } printf("\n\n\n\n"); } while (item); return 0; }
部分運行結果截圖
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。