<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言利用動態連結串列實現學生學籍管理系統的具體程式碼,供大家參考,具體內容如下
/* * C語言學生資訊管理系統(動態連結串列版) * 作者:cbc * 時間:2018年6月7日 * 功能:增添新鍵資料、修改刪除資料、查詢統計資料 * 平臺:windows */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> # define LEN sizeof(struct Student) struct Student { char num[10]; /*學號*/ char name[20]; /*姓名*/ char sex[10]; /*性別*/ int age; /*年齡*/ char phone[12];/*電話*/ char qq[12]; /*QQ號*/ char nativePlace[20];/*籍貫*/ char department[20];/*系別*/ char major[20];/*專業*/ char className[20];/*班級*/ struct Student *next; }; char filename[30];//全域性變數,用來儲存要開啟的檔案名字 /*生成連結串列*/ struct Student *Creat(int n) { void menu_print_in(void); struct Student *head; struct Student *p1, *p2; int i; system("cls"); for (i = 1;i < n + 1;i++) { p1 = (struct Student*)malloc(LEN); menu_print_in(); scanf("%s %s %s %d %s %s %s %s %s %s", p1->num, p1->name, p1->sex, &p1->age, p1->phone, p1->qq,p1->nativePlace,p1->department,p1->major,p1->className); p1->next = NULL; if (i == 1) { head = p2 = p1; } else { p2->next = p1; p2 = p1; } } return(head); } /*資料存檔(wb只寫)*/ void WriteData_wb(struct Student *head) { FILE *fp; struct Student *p; if ((fp = fopen(filename, "wb")) == NULL) printf("a error! Can not open the file!"); p = head; while (p != NULL) { if (fwrite(p, LEN, 1, fp) != 1) { printf("寫入資料出錯n"); fclose(fp); return; } p = p->next; } fclose(fp); } /*資料存檔(ab追加) void WriteData_ab(struct Student *head) { FILE *fp; struct Student *p; if ((fp = fopen(filename, "ab")) == NULL) printf("a error! Can not open the file!"); p = head; while (p != NULL) { if (fwrite(p, LEN, 1, fp) != 1) { printf("寫入資料出錯n"); fclose(fp); return; } p = p->next; } fclose(fp); } /*讀取資料*/ /*讀取資料檔案儲存到連結串列中 ,返回指向此連結串列頭指標*/ struct Student *ReadData(void) { struct Student *head = NULL; struct Student *p1, *p2;//s = p1;p = p2; FILE *fp; if ((fp = fopen(filename, "rb+")) == NULL) { printf("開啟檔案出錯n"); exit(0); } while (!feof(fp)) { if ((p1 = (struct Student*)malloc(LEN)) == NULL) { printf("記憶體申請出錯n"); fclose(fp); exit(0); } if (fread(p1, LEN, 1, fp) != 1) { free(p1); break; } if (head == NULL) head = p2 = p1; else { p2->next = p1; p2 = p1; } } fclose(fp); return (head); } /*【1】全量查詢*/ void Print_inquire_all(void) { void menu_print_out(void); struct Student *pt; pt = ReadData(); menu_print_out(); do { printf("%-10s%6s%8s%4d%13s%11s %s %s %s %sn", pt->num, pt->name, pt->sex, pt->age, pt->phone, pt->qq, pt->nativePlace, pt->department, pt->major, pt->className); pt = pt->next; } while (pt != NULL); printf("nn"); } /*【2】學號查詢*/ int Print_inquire_num() { void menu_print_out(void); struct Student *pt; char str_num[10]; printf("◎請輸入您要查詢的學號:"); scanf("%s", str_num); pt = ReadData(); menu_print_out(); do { if (strcmp(pt->num, str_num) == 0) { printf("%-10s%6s%8s%4d%13s%11s %s %s %s %sn", pt->num, pt->name, pt->sex, pt->age, pt->phone, pt->qq, pt->nativePlace, pt->department, pt->major, pt->className); printf("nn"); return 0; } pt = pt->next; } while (pt != NULL); printf("資料庫中沒有儲存您要查詢的資料!n"); printf("nn"); return 0; } /*【3】姓名查詢*/ int Print_inquire_name() { void menu_print_out(void); struct Student *pt; char str_name[20]; printf("◎請輸入您要查詢的姓名:"); scanf("%s", str_name); pt = ReadData(); menu_print_out(); do { if (strcmp(pt->name, str_name) == 0) { printf("%-10s%6s%8s%4d%13s%11s %s %s %s %sn", pt->num, pt->name, pt->sex, pt->age, pt->phone, pt->qq, pt->nativePlace, pt->department, pt->major, pt->className); printf("nn"); return 0; } pt = pt->next; } while (pt != NULL); printf("資料庫中沒有儲存您要查詢的資料!n"); printf("nn"); return 0; } /*【4】模糊查詢*/ int Print_inquire_fuzzy(void) { void menu_print_out(void); struct Student *pt; char str_find[20]; int m = 0; printf("◎請輸入您要查詢的關鍵詞:"); scanf("%s", str_find); pt = ReadData(); menu_print_out(); do { if (strstr(pt->num, str_find) != 0 || strstr(pt->name, str_find) != 0 || strstr(pt->sex, str_find) != 0 || strstr(pt->phone, str_find) != 0 || strstr(pt->qq, str_find) != 0) { printf("%-10s%6s%8s%4d%13s%11s %s %s %s %sn", pt->num, pt->name, pt->sex, pt->age, pt->phone, pt->qq, pt->nativePlace, pt->department, pt->major, pt->className); m = 1; } pt = pt->next; } while (pt != NULL); if (!m) printf("資料庫中沒有儲存您要查詢的資料!n"); printf("nn"); return 0; } /*【1】修改資料之刪除記錄*/ int Delete() { struct Student *pt1, *pt2, *head; char str_num[20]; printf("n◎請輸入您要刪除的學號資訊:"); scanf("%s", str_num); pt1 = ReadData(); pt2 = pt1->next; head = pt1; while (pt2 != NULL) { if (strcmp(pt1->num, str_num) == 0) { WriteData_wb(pt2); } else if (strcmp(pt2->num, str_num) == 0) { pt1->next = pt2->next; WriteData_wb(head); } pt2 = pt2->next; pt1 = pt1->next; } if (pt2 != NULL) printf("資料庫中沒有儲存您要刪除的資料!n"); printf("nn"); return 0; } /*【2】修改資料之修改記錄*/ int Amend() { void menu_print_in(void); struct Student *pt1, *pt2, *head; char str_num[20]; printf("◎請輸入您要修改的學號資訊:"); scanf("%s", str_num); pt1 = ReadData(); pt2 = pt1->next; head = pt1; while (pt2 != NULL) { if (strcmp(pt1->num, str_num) == 0) { menu_print_in(); scanf("%s %s %s %d %s %s %s %s %s %s", pt1->num, pt1->name, pt1->sex, &pt1->age, pt1->phone, pt1->qq, pt1->nativePlace, pt1->department, pt1->major, pt1->className); WriteData_wb(head); } else if (strcmp(pt2->num, str_num) == 0) { menu_print_in(); scanf("%s %s %s %d %s %s %s %s %s %s", pt2->num, pt2->name, pt2->sex, &pt2->age, pt2->phone, pt2->qq, pt2->nativePlace, pt2->department, pt2->major, pt2->className); WriteData_wb(head); } pt2 = pt2->next; pt1 = pt1->next; } if (pt2 != NULL) printf("資料庫中沒有儲存您要刪除的資料!n"); return 0; } /*【3】修改資料之整理資料*/ int Neaten() { struct Student *first; struct Student *tail; struct Student *p_min; struct Student *min; struct Student *p; struct Student *head; head = ReadData(); first = NULL; while (head != NULL) { for (p = head, min = head; p->next != NULL; p = p->next) { if (strcmp(p->next->num, min->num) < 0) { p_min = p; min = p->next; } } if (first == NULL) { first = min; tail = min; } else { tail->next = min; tail = min; } if (min == head) { head = head->next; } else { p_min->next = min->next; } } if (first != NULL) { tail->next = NULL; } head = first; WriteData_wb(head); return 0; } /*輸入寫入資料的數量*/ int Creat_num(void) { int n; printf("n◎請輸入您此次要新增的資料個數:"); if (scanf("%d", &n) != 1) { printf("a error!"); } return n; } /*選擇將要開啟的檔案*/ int File_name() { printf("n◎請輸入您想要開啟的檔案:"); if (scanf("%s", filename) != 1) printf("a error!"); return 0; } /*主選單*/ void menu(void) { void menu_add(void); void menu_inquire(void); void menu_amend(void); int a = 0; printf(" ╭════════╮ n"); printf("╭══════╣學生管理系統V1.0╠══════╮n"); printf("║ ╰════════╯ ║n"); printf("║ 【1】新增資料 【3】修改資料 ║n"); printf("║ ║n"); printf("║ 【2】查詢資料 【4】退出系統 ║n"); printf("║ ║n"); printf("╰══════════════════════╯n"); printf("◎請輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); while (a != '1'&&a != '2'&&a != '3'&&a != '4') { printf("error! please input the right number!n"); putchar('a'); getchar(); printf("◎請重新輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); } switch (a) { case '1': File_name();menu_add(); break; case '2': File_name();menu_inquire(); break; case '3': File_name();menu_amend(); break; case '4': exit(0); break; } getchar(); } /*二級選單之新增資料*/ void menu_add(void) { int a = 0; system("cls"); getchar(); printf(" ╭════════╮ n"); printf("╭══════╣ 新增資料方式 ╠══════╮n"); printf("║ ╰════════╯ ║n"); printf("║ 【1】新建檔案 【2】增添資料 【3】返回選單 ║n"); printf("║ ║n"); printf("╰══════════════════════╯n"); printf("◎請輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); while (a != '1'&&a != '2'&&a != '3') { printf("error! please input the right number!n"); putchar('a'); getchar(); printf("◎請重新輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); } switch (a) { case '1': WriteData_wb(Creat(Creat_num())); printf("n◎新建檔案成功且資料已成功儲存◎n"); system("pause"); system("cls"); menu_add(); break; case '2': WriteData_ab(Creat(Creat_num())); printf("n◎資料已成功新增◎n"); system("pause"); system("cls"); menu_add(); break; case '3': system("cls"); getchar(); menu(); break; } } /*二級選單之查詢資料*/ void menu_inquire(void) { int a = 0; system("cls"); getchar(); while (1) { system("cls"); printf(" ╭════════╮ n"); printf("╭══════╣ 查詢資料方式 ╠══════╮n"); printf("║ ╰════════╯ ║n"); printf("║ 【1】全量查詢 【4】模糊查詢 ║n"); printf("║ ║n"); printf("║ 【2】學號查詢 【5】返回選單 ║n"); printf("║ ║n"); printf("║ 【3】姓名查詢 ║n"); printf("╰══════════════════════╯n"); printf("◎請輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); while (a != '1'&&a != '2'&&a != '3'&&a != '3'&&a != '4'&&a != '5'&&a != '6') { printf("error! please input the right number!n"); putchar('a'); getchar(); printf("◎請重新輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); } switch (a) { case '1': Print_inquire_all();system("pause");getchar(); break; case '2': Print_inquire_num();system("pause");getchar(); break; case '3': Print_inquire_name();system("pause");getchar(); break; case '4': Print_inquire_fuzzy();system("pause");getchar();; break; case '5': system("cls");getchar();menu(); break; } } } /*二級選單之修改資料*/ void menu_amend(void) { int a = 0; system("cls"); getchar(); while (1) { system("cls"); printf(" ╭════════╮ n"); printf("╭══════╣ 修改資料方式 ╠══════╮n"); printf("║ ╰════════╯ ║n"); printf("║ 【1】刪除記錄 【3】整理資料 ║n"); printf("║ ║n"); printf("║ 【2】修改記錄 【4】返回選單 ║n"); printf("╰══════════════════════╯n"); printf("◎請輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); while (a != '1'&&a != '2'&&a != '3'&&a != '4') { printf("error! please input the right number!n"); putchar('a'); getchar(); printf("◎請重新輸入功能前的序號進入相應的工具:【 】bb"); a = getchar(); } switch (a) { case '1': Delete(); printf("nn◎已成功刪除指定資料◎n"); system("pause"); getchar(); break; case '2': Amend(); printf("nn◎已成功修改指定資料◎n"); system("pause"); getchar(); break; case '3': Neaten(); printf("nn◎資料已成功按照學號重新排列◎n"); system("pause"); getchar(); break; case '4': system("cls"); getchar(); menu(); break; } } } /*輸入輸出提示欄*/ void menu_print_in(void) { printf("------------------------------------------------------------------------n"); printf("學號 姓名 性別 年齡 電話 QQ 籍貫 系別 專業 班級 n"); printf("------------------------------------------------------------------------n"); } void menu_print_out(void) { printf("--------------------------------------------------------------------------n"); printf("學號 姓名 性別 年齡 電話 QQ 籍貫 系別 專業 班級 n"); printf("--------------------------------------------------------------------------n"); } /*主函數*/ int main(void) { SetConsoleTitle(L"學生學籍管理系統"); menu(); return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45