欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計

 更新時間:2022年03月16日 15:51:07   作者:tan-1210  
這篇文章主要為大家詳細介紹了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)文章

  • C++中new的用法及說明

    C++中new的用法及說明

    這篇文章主要介紹了C++中new的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • VC++文件監(jiān)控之FindFirstChangeNotification

    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ù)庫連接池

    這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)MySQL數(shù)據(jù)庫連接池,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下
    2024-03-03
  • C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序詳解

    C++中構(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-01
  • 平衡二叉樹的實現(xiàn)實例

    平衡二叉樹的實現(xiàn)實例

    這篇文章主要介紹了平衡二叉樹的實現(xiàn)實例,需要的朋友可以參考下
    2014-02-02
  • 二叉搜索樹的插入與刪除(詳細解析)

    二叉搜索樹的插入與刪除(詳細解析)

    添加結(jié)點其實很容易,我們只需要找到結(jié)點所行對應(yīng)的位置就可以了,而且沒有要求是平衡的二叉搜索樹,因此每次添加結(jié)點都是在葉子結(jié)點上操作,不需要修改二叉搜索樹整體的結(jié)構(gòu)
    2013-09-09
  • C++實現(xiàn)LeetCode(205.同構(gòu)字符串)

    C++實現(xiàn)LeetCode(205.同構(gòu)字符串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(205.同構(gòu)字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • linux下實現(xiàn)的2048游戲示例分享

    linux下實現(xiàn)的2048游戲示例分享

    這篇文章主要介紹了linux下實現(xiàn)的2048游戲示例,需要的朋友可以參考下
    2014-04-04
  • C語言實現(xiàn)三子棋程序

    C語言實現(xiàn)三子棋程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++基于棧的深搜算法實現(xiàn)馬踏棋盤

    C++基于棧的深搜算法實現(xiàn)馬踏棋盤

    這篇文章主要為大家詳細介紹了C++基于棧的深搜算法實現(xiàn)馬踏棋盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論