您好,登錄后才能下訂單哦!
這篇文章主要講解了“C語言中怎么使用鏈表實(shí)現(xiàn)學(xué)生籍貫管理系統(tǒng)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C語言中怎么使用鏈表實(shí)現(xiàn)學(xué)生籍貫管理系統(tǒng)”吧!
#include<stdio.h> #include<stdlib.h> #include<string.h> //定義一個(gè)學(xué)生結(jié)構(gòu)體 typedef struct student { char no[12]; //學(xué)號(hào) char name[40]; //姓名 char tele[20]; //電話號(hào)碼 int D[18]; //電話號(hào)碼碼 char jg[60]; //籍貫 char addr[80]; //通訊地址 struct student* next; //指向下一節(jié)點(diǎn)的指針 }STU; //函數(shù)聲明放在這里 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(); //創(chuàng)建表頭,初始化鏈表 STU* LIstInit(STU* L) { STU* head = NULL; head = (STU*)malloc(sizeof(STU)); head->next = NULL; L = head; return L; } //創(chuàng)建鏈表,將新生成的節(jié)點(diǎn)插入到鏈表的表頭 STU* ListCreate(STU* L, int n) { int i; for (i = 0; i < n; i++) { STU* p; //將新生成的節(jié)點(diǎn)插入到鏈表中 p = NULL; p = (STU*)malloc(sizeof(STU)); input(p, i); p->next = L->next; L->next = p; } return L; } //對鏈表進(jìn)行節(jié)點(diǎn)的插入操作 void ListInsert(STU* L) { STU* s = NULL; //生成一個(gè)新節(jié)點(diǎn)s s = (STU*)malloc(sizeof(STU)); printf("請輸入您要插入的學(xué)生的學(xué)號(hào):"); scanf("%s", &s->no); printf("請輸入您要插入的學(xué)生的姓名:"); scanf("%s", &s->name); printf("請輸入您要插入的學(xué)生的電話號(hào)碼:"); scanf("%s", &s->tele); printf("請輸入您要插入的學(xué)生的身份證號(hào)碼:"); scanf("%s", &s->D); printf("請輸入您要插入的學(xué)生的籍貫:"); scanf("%s", &s->jg); printf("請輸入您要插入的學(xué)生的通訊地址:"); scanf("%s", &s->addr); s->next = L->next; L->next = s; } //對鏈表的進(jìn)行節(jié)點(diǎn)的刪除操作 void ListDelete(STU* L, char n[]) { STU* p = L->next, * pre = L; //定義p指針指向頭節(jié)點(diǎn)的指向,定義pre指向頭節(jié)點(diǎn),pre始終指向p的前驅(qū)節(jié)點(diǎn) if (p == NULL) printf("數(shù)據(jù)為空,無法刪除!"); else { while (strcmp(p->name, n) != 0) { pre = p; p = pre->next; if (p == NULL) { printf("沒有找到相關(guān)信息,無法刪除\n"); return; } } pre->next = p->next; free(p); printf("刪除成功"); } } void LIstSearch(STU* L, char n[]) { STU* p = L->next; if (p == NULL) printf("數(shù)據(jù)為空,無法查找!"); else { while (strcmp(p->name, n) != 0) { p = p->next; if (p == NULL) { printf("沒有找到相關(guān)信息\n"); return; } } printf("該學(xué)生的籍貫為:\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("請選擇您修改后的學(xué)生籍貫:\n"); scanf("%s", &JG); strcpy(p->jg, JG); break; } p = p->next; } } void input(STU* p, int i) { printf("請輸入第%d名學(xué)生的學(xué)號(hào):", i + 1); scanf("%s", &p->no); printf("請輸入第%d名學(xué)生的姓名:", i + 1); scanf("%s", &p->name); printf("請輸入第%d名學(xué)生的電話號(hào)碼:", i + 1); scanf("%s", &p->tele); printf("請輸入第%d名學(xué)生的身份證號(hào)碼:", i + 1); scanf("%s", &p->D); printf("請輸入第%d名學(xué)生的籍貫:", i + 1); scanf("%s", &p->jg); printf("請輸入第%d名學(xué)生的通訊地址:", 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, "學(xué)號(hào)\t\t姓名\t\t電話號(hào)碼\t\t身份證號(hào)碼\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("保存成功,請到當(dāng)前目錄下的student.txt文件中查看"); fclose(fp); } void menu() { printf("\n\n"); printf("\t\t\t===================學(xué)試報(bào)名管理系統(tǒng)===================\n"); printf("\t\t\t* 作者:XXX 班級(jí):XXXXXXXX 學(xué)號(hào):XXXXXXXXXXXXXXX *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 1>. 錄入學(xué)生的相關(guān)信息 *\n"); printf("\t\t\t* 2>. 全部學(xué)生的相關(guān)信息 *\n"); printf("\t\t\t* 3>. 查找某個(gè)就學(xué)生的籍貫 *\n"); printf("\t\t\t* 4>. 修改某個(gè)學(xué)生的籍貫 *\n"); printf("\t\t\t* 5>. 刪除某個(gè)學(xué)生的相關(guān)信息 *\n"); printf("\t\t\t* 6>. 插入某個(gè)學(xué)生的相關(guān)信息 *\n"); printf("\t\t\t* 7>. 保存學(xué)生信息 *\n"); printf("\t\t\t* 0>. 退出管理系統(tǒng) *\n"); printf("\t\t\t* 歡迎使用本系統(tǒng)!*\n"); printf("\t\t\t=====================================================\n"); printf("\t\t\t輸入選項(xiàng),按回車進(jìn)入選項(xiàng): \n"); } int main() { int item, n; //item用于接收輸入的命令,n用于接收輸入的學(xué)生人數(shù) char nam[30]; STU* L = NULL; L = LIstInit(L); do { menu(); printf("請輸入相應(yīng)的數(shù)字,進(jìn)行相應(yīng)的操作:\n"); scanf("%d", &item); switch (item) { case 1: printf("請輸入您要錄入的學(xué)生人數(shù):"); scanf("%d", &n); L = ListCreate(L, n); break; case 2: printf("全部學(xué)生信息如下:\n"); printf("學(xué)號(hào)\t\t姓名\t\t電話號(hào)碼\t\t身份證號(hào)碼\t\t籍貫\t\t通訊地址\n"); output(L); break; case 3: printf("請輸入您要查找的學(xué)生姓名:"); scanf("%s", nam); LIstSearch(L, nam); break; case 4: printf("請輸入您要修改的學(xué)生姓名:"); scanf("%s", nam); ListModify(L, nam); break; case 5: printf("請輸入您要?jiǎng)h除的學(xué)生的姓名:"); scanf("%s", nam); ListDelete(L, nam); break; case 6: ListInsert(L); break; case 7: PrintFile(L); break; case 0: printf("即將退出學(xué)生籍貫管理系統(tǒng)....."); exit(0); default: break; } printf("\n\n\n\n"); } while (item); return 0; }
部分運(yùn)行結(jié)果截圖
感謝各位的閱讀,以上就是“C語言中怎么使用鏈表實(shí)現(xiàn)學(xué)生籍貫管理系統(tǒng)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C語言中怎么使用鏈表實(shí)現(xiàn)學(xué)生籍貫管理系統(tǒng)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。