C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計
本文實例為大家分享了C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、問題陳述
宿舍對于大學(xué)生在校生活來說相當(dāng)于家的存在,而宿舍管理又是學(xué)校后勤管理的重要環(huán)節(jié),如何直觀的了解宿舍的入住情況和每位同學(xué)的住宿位置是提高工作效率的重要課題,根據(jù)我們所學(xué)的C語言和數(shù)據(jù)結(jié)構(gòu)課程中有關(guān)鏈表的內(nèi)容,為宿舍管理人員編寫宿舍管理查詢軟件,就可以輕松滿足實現(xiàn)上述需求。
任務(wù):
1、為宿舍管理人員編寫一個宿舍管理查詢軟件, 程序設(shè)計要求:
1)、采用交互工作方式
2)、可按關(guān)鍵字(姓名、學(xué)號、房號)進行排序
2、查詢菜單: (用二分查找實現(xiàn)以下操作)
1)、按姓名查詢
2)、按學(xué)號查詢
3)、按房號查詢
3、打印任一查詢結(jié)果(可以連續(xù)操作)
二、概要設(shè)計
2.1 概要簡述
根據(jù)系統(tǒng)要求,即本系統(tǒng)具有信息的錄入,顯示,排序顯示、查找,插入、刪除、結(jié)束程序等功能,先設(shè)計出詳細的系統(tǒng)流程圖,然后將源代碼輸入程序,進行編譯調(diào)試即可。
程序總體分10個項目:輸入記錄、顯示記錄、按姓名排序并顯示、按房間號排序并顯示 、按學(xué)號排序并顯示 、按姓名查找并顯示 、按房間號查找并顯示 、按學(xué)號查找并顯示、插入一條記錄按學(xué)號排序并顯示以及結(jié)束程序。
2.2 線性表存儲結(jié)構(gòu)表示
typedef struct { ?? ?char name[20]; ?? ?int num; ? ? ? ? ? ?//學(xué)號和房號都為整型 ?? ?int room; } stu; typedef struct { ?? ?int length; //當(dāng)前長度 ?? ?stu *elem; ?//存儲空間基址 ?? ?int listsize; ?//當(dāng)前分配的存儲容量 } linklist;
2.3 詳細設(shè)計
2.3.1 系統(tǒng)流程圖
2.3.2 三種排序方法及二分查找法
2.3.2.1 冒泡排序(按姓名排序)
//按姓名排序(采用冒泡排序) void sort1(linklist &L) {? ?? ?int i, j; ?? ?stu temp; ?? ?for (i = 0; i<L.length - 1; i++) ?? ??? ?for (j = 0; j<L.length-1-i; j++) ?? ??? ??? ?if (strcmp(L.elem[j].name, L.elem[j+1].name)>0) { ?? ??? ??? ??? ?temp = L.elem[j]; ?? ??? ??? ??? ?L.elem[j] = L.elem[j+1]; ?? ??? ??? ??? ?L.elem[j+1] = temp; ?? ??? ??? ?} }
2.3.2.2 折半插入排序(按學(xué)號排序)
//按學(xué)號排序(采用折半插入排序) void sort2(linklist &L) {? ?? ?int i, j, mid, low, high; ?? ?stu temp; ?? ?for (i = 1; i < L.length; i++) { ?? ??? ?if(L.elem[i].num<L.elem[i-1].num) { ?? ??? ??? ?temp = L.elem[i]; ?? ??? ??? ?low = 0; ?? ??? ??? ?high = i-1; ?? ??? ??? ?while (low <= high) { ?? ??? ??? ??? ?mid = (low + high) / 2; ?? ??? ??? ??? ?if (temp.num < L.elem[mid].num) ?? ??? ??? ??? ??? ?high = mid - 1; ?? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?low = mid + 1; ?? ??? ??? ?} ?? ??? ??? ?for (j = i - 1; j >= high+1; j--) ?? ??? ??? ??? ?L.elem[j+1]=L.elem[j]; ?? ??? ??? ?L.elem[high+1]=temp; ?? ??? ?} ?? ?} }
2.3.2.3 簡單選擇排序(按房號排序)
//按房號排序(采用簡單選擇排序) void sort3(linklist &L) {? ?? ?int i,j,k; ?? ?stu temp; ?? ?for(i=0; i<L.length-1; i++) { ?? ??? ?k=i; ?? ??? ?for(j=i+1; j<L.length; j++) ?? ??? ??? ?if(L.elem[j].room<L.elem[k].room) ?? ??? ??? ??? ?k=j; ?? ??? ?if(k!=i){ ?? ??? ??? ?temp = L.elem[i]; ?? ??? ??? ?L.elem[i] = L.elem[k]; ?? ??? ??? ?L.elem[k] = temp; ?? ??? ?} ?? ?} }
2.3.2.4 二分查找法(以按姓名查找為例)
//按姓名從小到大查找(采用二分查找) void search1(linklist &L) {? ?? ?if (L.length == 0) { ?? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ?Ret(); ?? ??? ?Menu(); ?? ?} else { ?? ??? ?int low = 0, high = L.length, mid, flag = 0; ?? ??? ?printf("\n"); ?? ??? ?printf("按姓名查找-->請輸入要查找的姓名:"); ?? ??? ?char a[15], ch; ?? ??? ?scanf("%s", a); ?? ??? ?while (low <= high) { ?? ??? ??? ?mid = (low + high) / 2; ?? ??? ??? ?if (strcmp(a, L.elem[mid].name) == 0) { ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} else if (strcmp(a, L.elem[mid].name)>0) ?? ??? ??? ??? ?low = mid + 1; ?? ??? ??? ?else ?? ??? ??? ??? ?high = mid - 1; ?? ??? ?} ?? ??? ?if (flag == 1) { ?? ??? ??? ?printf("查找成功-->該學(xué)生信息為:\n"); ?? ??? ??? ?printf("姓名 ? ? ? 學(xué)號 ? ?房號\n"); ?? ??? ??? ?printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room); ?? ??? ??? ?if (Select()) ?? ??? ??? ??? ?search1(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} else { ?? ??? ??? ?printf("該學(xué)生不存在!"); ?? ??? ??? ?if (Select()) ? ?search1(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} ?? ?} }
三、測試與運行
3.1 系統(tǒng)界面
3.2 新建宿舍名單
3.3 排序(以姓名排序為例)
3.4 查詢(以學(xué)號查詢?yōu)槔?/p>
3.5 插入學(xué)生信息
3.6 刪除學(xué)生信息
四、代碼實現(xiàn)
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #define N 40 //線性表存儲空間的初始分配量 #define increase 10 //線性表存儲空間的分配量增量 int choice; ?//定義全局變量 typedef struct { ?? ?char name[20]; ?? ?int num; ? ? ? ? ? ?//學(xué)號和房號都為整型 ?? ?int room; } stu; stu stud; typedef struct { ?? ?int length; //當(dāng)前長度 ?? ?stu *elem; ?//存儲空間基址 ?? ?int listsize; ?//當(dāng)前分配的存儲容量 } linklist; //線性表初始化 void Init(linklist &L) {? ?? ?L.length = 0; ?? ?L.elem = (stu *)malloc(N * sizeof(stu)); ?? ?L.listsize = N; } //操作菜單 void Menu() {? ?? ?printf( "**************************************\n" ); ?? ?printf( "*** ? ? ? 歡迎進入宿舍管理系統(tǒng) ? ? ***\n" ); ?? ?printf( "**************************************\n" ); ?? ?printf( "* ? ? ? ?1. ?新建宿舍名單 ? ? ? ? ? ?*\n" ); ?? ?printf( "* ? ? ? ?2. ?排序宿舍信息 ? ? ? ? ? ?*\n" ); ?? ?printf( "* ? ? ? ?3. ?查詢宿舍信息 ? ? ? ? ? ?*\n" ); ?? ?printf( "* ? ? ? ?4. ?插入宿舍信息 ? ? ? ? ? ?*\n" ); ?? ?printf( "* ? ? ? ?5. ?刪除宿舍信息 ? ? ? ? ? ?*\n" ); ?? ?printf( "* ? ? ? ?0. ?退出系統(tǒng) ? ? ? ? ? ? ? ?*\n" ); ?? ?printf( "**************************************\n" ); ?? ?printf("請輸入菜單(0-5):"); ?? ?scanf("%d", &choice); ?? ?if (choice<0 || choice>5) { ?? ??? ?system("cls"); ?? ??? ?printf("輸入數(shù)字不對,請重新!\n"); ?? ??? ?printf("\n"); ?? ??? ?Menu(); ?? ?} } //打印學(xué)生信息 void Display(linklist &L) {? ?? ?int i; ?? ?printf("姓名 ? ? ? 學(xué)號 ? ?房號\n"); ?? ?for (i = 0; i<L.length; i++) ?? ??? ?printf("%-10s %-2d %5d\n", L.elem[i].name, L.elem[i].num, L.elem[i].room); } //返回主界面 void Ret() { ? ? ?? ?char c; ?? ?fflush(stdin); ?? ?printf("\n"); ?? ?printf("請按任意鍵進入主界面:"); ?? ?scanf("%c", &c); ?? ?system("cls"); } //創(chuàng)建學(xué)生信息表 void Create(linklist &L) {? ?? ?if (L.length >= L.listsize) { //判斷學(xué)生的人數(shù)是否超過初值,如果超過,則重新分配 ?? ??? ?stu *newbase; ?? ??? ?newbase = (stu*)realloc(L.elem, (N + increase) * sizeof(stu)); ?? ??? ?L.elem = newbase; ?? ??? ?L.listsize += increase; ?? ?} ?? ?int i = 2; ?? ?char ch; ?? ?printf("********開始創(chuàng)建學(xué)生信息**********\n"); ?? ?printf("\n"); ?? ?printf("請輸入第1個學(xué)生的信息\n"); ?? ?printf("請輸入姓名:"); ?? ?fflush(stdin); ? ? ?// 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) ?? ?gets(stud.name); ? ?//輸入一行字符串(姓名) ?? ?printf("請輸入學(xué)號:"); ?? ?scanf("%d", &stud.num); ?? ?printf("請輸入房號:"); ?? ?scanf("%d", &stud.room); ?? ?ch = getchar(); ?? ?strcpy(L.elem[L.length].name, stud.name); ?? ?L.elem[L.length].num = stud.num; ?? ?L.elem[L.length].room = stud.room; ?? ?L.length++; ?? ?printf("\n"); ?? ?printf("是否繼續(xù)輸入?<y/n>:"); ?? ?scanf("%c", &ch); ?? ?printf("\n"); ?? ?while (ch == 'y') { ?? ??? ?printf("請輸入第%d個學(xué)生的信息\n", i); ?? ??? ?printf("請輸入姓名:"); ?? ??? ?fflush(stdin); ? ? ?// 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) ?? ??? ?gets(stud.name); ? ?//輸入一行字符串(姓名) ?? ??? ?printf("請輸入學(xué)號:"); ?? ??? ?scanf("%d", &stud.num); ?? ??? ?printf("請輸入房號:"); ?? ??? ?scanf("%d", &stud.room); ?? ??? ?strcpy(L.elem[L.length].name, stud.name); ?? ??? ?L.elem[L.length].num = stud.num; ?? ??? ?L.elem[L.length].room = stud.room; ?? ??? ?i++; ?? ??? ?L.length=i-1; ?? ??? ?ch = getchar(); ?? ??? ?printf("\n"); ?? ??? ?printf("是否繼續(xù)輸入?<y/n>:"); ?? ??? ?scanf("%c", &ch); ?? ??? ?printf("\n"); ?? ?} ?? ?if (ch == 'n') ?? ??? ?system("cls"); } //按姓名排序(采用冒泡排序) void sort1(linklist &L) {? ?? ?int i, j; ?? ?stu temp; ?? ?for (i = 0; i<L.length - 1; i++) ?? ??? ?for (j = 0; j<L.length-1-i; j++) ?? ??? ??? ?if (strcmp(L.elem[j].name, L.elem[j+1].name)>0) { ?? ??? ??? ??? ?temp = L.elem[j]; ?? ??? ??? ??? ?L.elem[j] = L.elem[j+1]; ?? ??? ??? ??? ?L.elem[j+1] = temp; ?? ??? ??? ?} } //按學(xué)號排序(采用折半插入排序) void sort2(linklist &L) {? ?? ?int i, j, mid, low, high; ?? ?stu temp; ?? ?for (i = 1; i < L.length; i++) { ?? ??? ?if(L.elem[i].num<L.elem[i-1].num) { ?? ??? ??? ?temp = L.elem[i]; ?? ??? ??? ?low = 0; ?? ??? ??? ?high = i-1; ?? ??? ??? ?while (low <= high) { ?? ??? ??? ??? ?mid = (low + high) / 2; ?? ??? ??? ??? ?if (temp.num < L.elem[mid].num) ?? ??? ??? ??? ??? ?high = mid - 1; ?? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?low = mid + 1; ?? ??? ??? ?} ?? ??? ??? ?for (j = i - 1; j >= high+1; j--) ?? ??? ??? ??? ?L.elem[j+1]=L.elem[j]; ?? ??? ??? ?L.elem[high+1]=temp; ?? ??? ?} ?? ?} } //按房號排序(采用簡單選擇排序) void sort3(linklist &L) {? ?? ?int i,j,k; ?? ?stu temp; ?? ?for(i=0; i<L.length-1; i++) { ?? ??? ?k=i; ?? ??? ?for(j=i+1; j<L.length; j++) ?? ??? ??? ?if(L.elem[j].room<L.elem[k].room) ?? ??? ??? ??? ?k=j; ?? ??? ?if(k!=i){ ?? ??? ??? ?temp = L.elem[i]; ?? ??? ??? ?L.elem[i] = L.elem[k]; ?? ??? ??? ?L.elem[k] = temp; ?? ??? ?} ?? ?} } //排序函數(shù) void Sort(linklist &L) {? ?? ?int c; ?? ?printf("請輸入排序的方式(1:按名字排序,2:按學(xué)號排序,3:按房號排序):"); ?? ?scanf("%d", &c); ?? ?switch (c) { ?? ??? ?case 1: ?? ??? ??? ?sort1(L); ?? ??? ??? ?if (L.length == 0) { ?? ??? ??? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ??? ??? ?Ret(); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} else { ?? ??? ??? ??? ?printf("按姓名排序:\n"); ?? ??? ??? ??? ?Display(L); ?? ??? ??? ??? ?Ret(); ?//調(diào)用返回主界面 ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?sort2(L); ?? ??? ??? ?if (L.length == 0) { ?? ??? ??? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ??? ??? ?Ret(); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} else { ?? ??? ??? ??? ?printf("按學(xué)號排序:\n"); ?? ??? ??? ??? ?Display(L); ?? ??? ??? ??? ?Ret(); ?//調(diào)用返回主界面 ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?sort3(L); ?? ??? ??? ?if (L.length == 0) { ?? ??? ??? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ??? ??? ?Ret(); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} else { ?? ??? ??? ??? ?printf("按房號排序:\n"); ?? ??? ??? ??? ?Display(L); ?? ??? ??? ??? ?Ret(); ?//調(diào)用返回主界面 ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?break; ?? ?} } //選擇是否繼續(xù)查找 int Select() {? ?? ?char ch; ?? ?scanf("%c", &ch); ?? ?printf("是否繼續(xù)查找?<y/n>:"); ?? ?fflush(stdin); ?? ?scanf("%c", &ch); ?? ?if (ch == 'y') { ?? ??? ?system("cls"); ?? ??? ?return 1; ?? ?} else ?? ??? ?return 0; } //按姓名從小到大查找(采用二分查找) void search1(linklist &L) {? ?? ?if (L.length == 0) { ?? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ?Ret(); ?? ??? ?Menu(); ?? ?} else { ?? ??? ?int low = 0, high = L.length, mid, flag = 0; ?? ??? ?printf("\n"); ?? ??? ?printf("按姓名查找-->請輸入要查找的姓名:"); ?? ??? ?char a[15], ch; ?? ??? ?scanf("%s", a); ?? ??? ?while (low <= high) { ?? ??? ??? ?mid = (low + high) / 2; ?? ??? ??? ?if (strcmp(a, L.elem[mid].name) == 0) { ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} else if (strcmp(a, L.elem[mid].name)>0) ?? ??? ??? ??? ?low = mid + 1; ?? ??? ??? ?else ?? ??? ??? ??? ?high = mid - 1; ?? ??? ?} ?? ??? ?if (flag == 1) { ?? ??? ??? ?printf("查找成功-->該學(xué)生信息為:\n"); ?? ??? ??? ?printf("姓名 ? ? ? 學(xué)號 ? ?房號\n"); ?? ??? ??? ?printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room); ?? ??? ??? ?if (Select()) ?? ??? ??? ??? ?search1(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} else { ?? ??? ??? ?printf("該學(xué)生不存在!"); ?? ??? ??? ?if (Select()) ? ?search1(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } //按學(xué)號從小到大查找(采用二分查找) void search2(linklist &L) {? ?? ?if (L.length == 0) { ?? ??? ?printf("\n"); ?? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ?Ret(); ?? ??? ?Menu(); ?? ?} else { ?? ??? ?int low = 0, high = L.length, mid, flag = 0; ?? ??? ?int n; ?? ??? ?char ch; ?? ??? ?printf("\n"); ?? ??? ?printf("按學(xué)號查找-->請輸入要查找的學(xué)號:"); ?? ??? ?scanf("%d", &n); ?? ??? ?while (low <= high) { ?? ??? ??? ?mid = (low + high) / 2; ?? ??? ??? ?if (n == L.elem[mid].num) { ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} else if (n>L.elem[mid].num) ?? ??? ??? ??? ?low = mid + 1; ?? ??? ??? ?else ?? ??? ??? ??? ?high = mid - 1; ?? ??? ?} ?? ??? ?if (flag == 1) { ?? ??? ??? ?printf("查找成功----->該學(xué)生信息為:\n"); ?? ??? ??? ?printf("姓名 ? ? ? 學(xué)號 ? ?房號\n"); ?? ??? ??? ?printf("%-1s0 %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room); ?? ??? ??? ?if (Select()) ?? ??? ??? ??? ?search2(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} else { ?? ??? ??? ?printf("該學(xué)生不存在!"); ?? ??? ??? ?if (Select()) ?? ??? ??? ??? ?search2(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } //按房號從小到大查找(采用二分查找) void search3(linklist &L) {? ?? ?if (L.length == 0) { //此函數(shù)功能為:返回主界面 ?? ??? ?printf("\n"); ?? ??? ?printf("已無學(xué)生記錄!\n"); ?? ??? ?Ret(); ?? ??? ?Menu(); ?? ?} else { ?? ??? ?int low = 0, high = L.length, mid, flag = 0;//flag作為標志符,為1則表示查找成功,否則沒有所要查找的學(xué)生 ?? ??? ?int m; ?? ??? ?char ch; ?? ??? ?printf("\n"); ?? ??? ?printf("按房號查找-->請輸入要查找的房號:"); ?? ??? ?scanf("%d", &m); ?? ??? ?while (low <= high) { ?? ??? ??? ?mid = (low + high) / 2; ?? ??? ??? ?if (m == L.elem[mid].room) { ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} else if (m>L.elem[mid].room) ?? ??? ??? ??? ?low = mid + 1; ?? ??? ??? ?else ?? ??? ??? ??? ?high = mid - 1; ?? ??? ?} ?? ??? ?if (flag == 1) { ?? ??? ??? ?printf("查找成功-->該學(xué)生信息為:\n"); ?? ??? ??? ?printf("姓名 ? ? ? 學(xué)號 ? ?房號\n"); ?? ??? ??? ?printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room); ?? ??? ??? ?if (Select()) ? ?//調(diào)用判斷函數(shù)1 ?? ??? ??? ??? ?search3(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} else { ?? ??? ??? ?printf("該學(xué)生不存在!"); ?? ??? ??? ?if (Select()) ?//調(diào)用判斷函數(shù)2 ?? ??? ??? ??? ?search3(L); ?? ??? ??? ?else { ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } //查找函數(shù) void Search(linklist &L) {? ?? ?int c; ?? ?printf("請輸入查找的方式(1:按名字查找,2:按學(xué)號查找,3:按房號查找):"); ?? ?scanf("%d", &c); ?? ?switch (c) { ?? ??? ?case 1: ?? ??? ??? ?sort1(L); ?? ??? ??? ?search1(L); ?? ??? ??? ?break;//先進行二分查找排序 ?? ??? ?case 2: ?? ??? ??? ?sort2(L); ?? ??? ??? ?search2(L); ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?sort3(L); ?? ??? ??? ?search3(L); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?break; ?? ?} } //按學(xué)號從小到大插入該學(xué)生 void Insert(linklist &L) {? ?? ?int i, j, k; ?? ?char ch; ?? ?printf("\n"); ?? ?printf("插入的學(xué)生信息為:\n"); ?? ?printf("姓名:"); ?? ?fflush(stdin);// 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) ?? ?gets(stud.name); ?? ?printf("學(xué)號:"); ?? ?scanf("%d", &stud.num); ?? ?printf("房號:"); ?? ?scanf("%d", &stud.room); ?? ?if (L.length == 0) { ?? ??? ?strcpy(L.elem[L.length].name, stud.name); ?? ??? ?L.elem[L.length].num = stud.num; ?? ??? ?L.elem[L.length].room = stud.room; ?? ?} ?? ?for (i = 0; i<L.length; i++) { ?? ??? ?if (stud.num<L.elem[i].num) { ?? ??? ??? ?k = i; ?? ??? ??? ?for (j = L.length; j>k; j--) ?? ??? ??? ??? ?L.elem[j] = L.elem[j - 1]; ?? ??? ??? ?strcpy(L.elem[k].name, stud.name); ?? ??? ??? ?L.elem[k].num = stud.num; ?? ??? ??? ?L.elem[k].room = stud.room; ?? ??? ??? ?break; ?? ??? ?} else { ?? ??? ??? ?strcpy(L.elem[L.length].name, stud.name); ?? ??? ??? ?L.elem[L.length].num = stud.num; ?? ??? ??? ?L.elem[L.length].room = stud.room; ?? ??? ?} ?? ?} ?? ?L.length++; ?? ?fflush(stdin); ?? ?printf("\n"); ?? ?printf("是否繼續(xù)插入?<y/n>:"); ?? ?scanf("%c", &ch); ?? ?if (ch == 'y') Insert(L); ?? ?else system("cls"); } //按學(xué)號刪除該學(xué)生 void Delete(linklist &L) {? ?? ?int i, j, k = -1; ?? ?char ch; ?? ?printf("\n"); ?? ?printf("\n"); ?? ?printf("請輸入要刪除學(xué)生的學(xué)號:"); ?? ?scanf("%d", &stud.num); ?? ?for (i = 0; i<L.length; i++) { ?? ??? ?if (stud.num == L.elem[i].num) { ?? ??? ??? ?printf("該學(xué)生的信息為:\n"); ?? ??? ??? ?printf("姓名:%s \n學(xué)號:%d \n房號:%d\n", L.elem[i].name, L.elem[i].num, L.elem[i].room); ?? ??? ??? ?k = i; ?? ??? ??? ?for (j = k; j<L.length - 1; j++) ?? ??? ??? ??? ?L.elem[j] = L.elem[j + 1]; ?? ??? ??? ?printf("已成功刪除\n"); ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?if (i >= L.length) printf("該學(xué)生不存在\n"); ?? ?if (k >= 0)L.length--; ?? ?fflush(stdin); ?? ?printf("\n"); ?? ?printf("是否繼續(xù)刪除操作?<y/n>:"); ?? ?scanf("%c", &ch); ?? ?system("cls"); ?? ?if (ch == 'y') Delete(L); ?? ?else system("cls"); } //主函數(shù) int main() { ? ?? ?linklist L; ? ?//定義線性表 L ?? ?Init(L); ?? ?Menu(); ? ? ? ?//調(diào)用主菜單函數(shù) ?? ?while (choice != 0) { ?? ??? ?system("cls"); ?? ??? ?switch (choice) { ?? ??? ??? ?case 1: ?? ??? ??? ??? ?Create(L); ? ?//調(diào)用線性表創(chuàng)建函數(shù) ?? ??? ??? ??? ?Menu(); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?Sort(L); ?? ??? ??? ??? ?break;//調(diào)用排序函數(shù) ?? ??? ??? ?case 3: ?? ??? ??? ??? ?Search(L); ?? ??? ??? ??? ?break;//調(diào)用查找函數(shù)進行(二分)查找 ?? ??? ??? ?case 4: ?? ??? ??? ??? ?sort2(L); ? ? ?//調(diào)用學(xué)號排序函數(shù) ?? ??? ??? ??? ?Insert(L); ? ? ? ?//按學(xué)號序列插入 ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?printf("插入后的學(xué)生信息:\n"); ?? ??? ??? ??? ?Display(L); ?? ??? ??? ??? ?Ret(); ?? ??? ??? ??? ?Menu(); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 5: ?? ??? ??? ??? ?Delete(L); ? ?//調(diào)用刪除函數(shù) ?? ??? ??? ??? ?if (L.length == 0) { ?? ??? ??? ??? ??? ?printf("\n"); ?? ??? ??? ??? ??? ?printf("學(xué)生記錄已被刪除完!\n"); ?? ??? ??? ??? ??? ?Ret(); ?? ??? ??? ??? ??? ?Menu(); ?? ??? ??? ??? ?} else { ?? ??? ??? ??? ??? ?printf("顯示刪除后的學(xué)生信息:\n"); ?? ??? ??? ??? ??? ?Display(L); ?? ??? ??? ??? ??? ?Ret(); ?? ??? ??? ??? ??? ?Menu(); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ?} ?? ?} }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
VC++文件監(jiān)控之FindFirstChangeNotification
因為ReadDirectoryChangesW 上次測試發(fā)現(xiàn)不能多級目錄監(jiān)控,所以嘗試用FindFirstChangeNotification來實施文件監(jiān)控,需要的朋友可以參考下2019-04-04使用C++實現(xiàn)MySQL數(shù)據(jù)庫連接池
這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)MySQL數(shù)據(jù)庫連接池,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下2024-03-03C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序詳解
C++ 語言一直被批評太復(fù)雜了,很多細節(jié)的地方需要仔細推敲,甚至其構(gòu)造函數(shù)和析構(gòu)的調(diào)用順序也成為了一個讓人迷惑的問題,在此我做了簡單的總結(jié)。這篇文章主要介紹了C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序,需要的朋友可以參考借鑒。2017-01-01C++實現(xiàn)LeetCode(205.同構(gòu)字符串)
這篇文章主要介紹了C++實現(xiàn)LeetCode(205.同構(gòu)字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07