實現一個通信錄;ide
通信錄能夠用來存儲1000我的的信息,每一個人的信息包括:函數
姓名、性別、年齡、電話、住址spa
提供如下方法:blog
1. 添加聯繫人信息排序
2. 刪除指定聯繫人信息get
3. 查找指定聯繫人信息input
4. 修改指定聯繫人信息string
5. 顯示全部聯繫人信息it
6. 以名字排序全部聯繫人io
7. 清空全部聯繫人
student.h:
#ifndef __CRT #define _CRT_SECURE_NO_WARNINGS 1 #endif #ifndef __STUDENT #ifndef __STDIO_H #include <stdio.h> #endif #ifndef __STDLIB_H #include <stdlib.h> #endif #ifndef __SRTRIG_H #include <string.h> #endif #ifndef __MAXSIZE #define MAXSIZE 1000 #endif typedef struct Stu { char name[20]; char sex[3]; int age; char tel[12]; char addr[20]; }Stu; void menu() /*菜單*/ { printf("\n"); printf("***************************************************************************\n"); printf("** ☆☆☆☆★★★★★ 歡迎學生信息管理系統 ★★★★★☆☆☆☆**\n"); printf("** ☆☆☆★★★★★ 一、添加聯繫人信息 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 二、刪除指定聯繫人信息 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 三、查找指定聯繫人信息 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 四、修改指定聯繫人信息 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 五、顯示全部聯繫人信息 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 六、以名字排序全部聯繫人 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 七、清空全部聯繫人 ★★★★★☆☆☆ **\n"); printf("** ☆☆☆★★★★★ 0、退出系統 ★★★★★☆☆☆ **\n"); printf("***************************************************************************\n"); printf("\n"); } void Add(Stu *stu, int *count) /*添加聯繫人信息*/ { if ((*count) >= MAXSIZE - 1) { printf("本系統已達到最大容納人數,不能再添加學生了!\n"); return; } printf("請輸入要添加的學生的姓名:> "); scanf("%s", (stu + (*count))->name); flag: printf("請輸入要添加的學生的姓別(男/女):> "); scanf("%s", (stu + (*count))->sex); if ((strcmp((stu + (*count))->sex, "男") != 0) && (strcmp((stu + (*count))->sex, "女") != 0)) { printf("請輸入正確的性別!\n"); goto flag; } printf("請輸入要添加的學生的年齡:> "); scanf("%d", &(stu + (*count))->age); printf("請輸入要添加的學生的電話:> "); scanf("%s", (stu + (*count))->tel); printf("請輸入要添加的學生的住址:> "); scanf("%s", (stu + (*count))->addr); printf("添加成功!\n"); (*count)++;/*已有人數加1*/ } void Delete(Stu *stu, int *count) /*刪除指定聯繫人信息*/ { char _name[20]; if ((*count) <= 0) { printf("此學生系統中尚未學生!\n"); return; } printf("請輸入您要刪除的學生的姓名:> "); scanf("%s", _name); for (int i = 0; i < (*count); i++) { if (strcmp((stu + i)->name, _name) == 0) { for (int j = i; j < (*count) - 1; j++) { strcpy((stu + j)->name, (stu + j + 1)->name); strcpy((stu + j)->sex, (stu + j + 1)->sex); (stu + j)->age = (stu + j + 1)->age; strcpy((stu + j)->tel, (stu + j + 1)->tel); strcpy((stu + j)->addr, (stu + j + 1)->addr); } (*count)--; printf("刪除成功!\n"); return; }/*if*/ }/*for*/ printf("此學生系統中沒有此學生!\n"); } void Search(const Stu *stu, const int count) /*查找指定聯繫人信息*/ { char _name[20]; printf("請輸入您要查找的學生的姓名:> "); scanf("%s", _name); for (int i = 0; i < count; i++) { if (strcmp((stu + i)->name, _name) == 0) { printf("*********=======您查抄的學生的信息爲=======*********\n"); printf(" ********* 姓名:> %s\n", (stu + i)->name); printf(" ********* 性別:> %s\n", (stu + i)->sex); printf(" ********* 年齡:> %d\n", (stu + i)->age); printf(" ********* 電話:> %s\n", (stu + i)->tel); printf(" ********* 住址:> %s\n", (stu + i)->addr); return; } }/*for*/ printf("沒有找到您要查找的學生!\n"); } void Alter(Stu *stu, const int count) /*修改指定聯繫人信息*/ { char _name[20]; printf("請輸入您要修改的學生的姓名:> "); scanf("%s", _name); for (int i = 0; i < count; i++) { if (strcmp((stu + i)->name, _name) == 0) { printf("請輸入修改後的姓名:> "); scanf("%s", (stu + i)->name); printf("請輸入修改後的性別:> "); scanf("%s", (stu + i)->sex); printf("請輸入修改後的年齡:> "); scanf("%d", &(stu + i)->age); printf("請輸入修改後的電話:> "); scanf("%s", (stu + i)->tel); printf("請輸入修改後的住址:> "); scanf("%s", (stu + i)->addr); printf("修改爲功!\n"); return; } }/*for*/ printf("此學生系統中沒有您要修改的學生!\n"); } void Show(const Stu *stu, const int count) /*顯示全部聯繫人信息*/ { if (count == 0) { printf("此學生系統中沒有學生!\n"); } else { printf(" 姓名 | 性別 | 年齡 | 電話 | 住址 \n"); for (int i = 0; i < count; i++) { printf("%2s |%5s |%6d |%13s |%s\n", (stu + i)->name, (stu + i)->sex, (stu + i)->age, (stu + i)->tel, (stu + i)->addr); } } } int StcCmp(const void*num1, const void *num2) /*快排的比較函數*/ { return (strcmp(((Stu *)num1)->name, ((Stu *)num2)->name) > 0) ? 1 : -1; } void Sort(Stu *stu, const int count) /*以名字排序全部聯繫人*/ { if (count == 0) { printf("此學生系統中沒有學生!\n"); return; } qsort(stu, count, sizeof(stu[0]), StcCmp); } void Empty(Stu *stu, int *count) /*清空全部聯繫人*/ { if (count == 0) { printf("此學生系統中沒有學生!\n"); return; } for (int i = 0; i < *count; i++) { *(stu + i)->name = NULL; *(stu + i)->sex = NULL; (stu + i)->age = 0; *(stu + i)->tel = NULL; *(stu + i)->addr = NULL; } *count = 0; printf("清空成功!"); } #endif
主程序:test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include "student.h" #define MAXSIZE 1000 typedef enum EN { EXIT, //退出 ADD, //添加 DELETE, //刪除 SEARCH, //查找 ALTER, //修改 SHOW, //顯示 SORT, //排序 EMPTY, //清空 }EN; int main() { Stu stu[MAXSIZE]; int count = 0; //系統中的現有人數 int input = 1; while (input) { menu(); printf("請選擇您要進行的服務項目:> "); scanf_s("%d", &input); switch (input) { case EXIT: printf("感謝您試用本服務系統,歡迎您的下次使用!\n"); system("pause"); return 0; case ADD: //添加 Add(stu, &count); break; case DELETE: //刪除 Delete(stu, &count); break; case SEARCH: //查找 Search(stu, count); break; case ALTER: //修改 Alter(stu, count); break; case SHOW: //顯示 Show(stu, count); break; case SORT: //排序 Sort(stu, count); Show(stu, count); break; case EMPTY: //清空 Empty(stu, &count); break; default: printf("請選擇正確的服務項目!\n"); break; }/*switch*/ }/*while*/ printf("\n"); system("pause"); return 0; }
運行界面:
進入運行界面後,可根據本身的需求選擇合適的服務項目。