目标:
实现学生信息的增加,学生信息的改动,学生信息的删除,学生信息的查找,学生信息的排序(这里是按年龄排序),学生信息的打印。
代码:
包含两个源文件一个头文件。
main.c
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include "contact.h" void test() { int input = 0; contact con; INITcontact(&con); printf("******************************\n"); printf(" 请选择需要的操作 \n"); printf(" 0.exit 1.add\n"); printf(" 2.del 3.search\n"); printf(" 4.modify 5.sort\n"); printf(" 6.print \n"); printf("******************************\n"); do { scanf("%d", &input); switch (input) {case EXIT: break; case ADD: ADDcontact(&con); break; case DEL: DELcontact(&con); break; case SEARCH: SEARCHcontact(&con); break; case MODIFY: MODIFYcontact(&con); break; case SORT: SORTcontact(&con); break; case PRINT: PRINTcontact(&con); break; default: printf("选择无效,请重新输入\n"); break; } } while (input); } int main() { test(); return 0; }
contact.c
#include"contact.h" int FINDBYname(const contact* pc, const char name[]) { for (int i = 0; i < pc->count; i++) { if (strcmp(pc->data[i].name, name) == 0) { return i; } } return -1; } void INITcontact(contact* pc) { assert(pc); memset(pc->data, 0, sizeof(pc->data)); pc->count = 0; } void ADDcontact(contact* pc) { if (pc->count == MAX) { printf("通讯录已满,添加失败\n"); return; } printf("请输入联系人的名字:"); scanf("%s", pc->data[pc->count].name); printf("请输入年龄:"); scanf("%d", &(pc->data[pc->count].age)); printf("请输入性别:"); scanf("%s", pc->data[pc->count].sex); printf("请输入电话:"); scanf("%s", pc->data[pc->count].tele); printf("请输入地址:"); scanf("%s", pc->data[pc->count].addr); pc->count++; printf("添加成功\n"); }; void DELcontact(contact* pc) { if (pc->count == 0) { printf("通讯录为空,无法删除\n"); return; } char name[NAME_MAX] = { 0 }; printf("请输入删除人的名字:"); scanf("%s", name); //查找名字 int pos = FINDBYname(pc, name); if (pos == -1) { printf("要删除的信息不存在\n"); return; } else { for (int j = pos; j < pc->count - 1; j++) { pc->data[j] = pc->data[j + 1]; } pc->count--; printf("删除成功"); } }; void SEARCHcontact(const contact* pc) { char name[NAME_MAX] = { 0 }; printf("请输入查找人的名字:"); scanf("%s", name); //查找名字 int pos = FINDBYname(pc, name); if (pos == -1) { printf("要查找的信息不存在\n"); return; } printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年龄", "性别", "电话", "地址"); printf("%-20s %-20d %-20s %-20s %-20s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); }; void PRINTcontact(const contact* pc) { printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年龄", "性别", "电话", "地址"); for (int i = 0; i < pc->count; i++) { printf("%-20s %-20d %-20s %-20s %-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); } }; void MODIFYcontact(contact* pc) { char name[NAME_MAX] = { 0 }; printf("请输入修改人的名字:"); scanf("%s", name); //查找名字 int pos = FINDBYname(pc, name); if (pos == -1) { printf("要修改的信息不存在\n"); return; } printf("请输入联系人的名字:"); scanf("%s", pc->data[pos].name); printf("请输入年龄:"); scanf("%d", &(pc->data[pos].age)); printf("请输入性别:"); scanf("%s", pc->data[pos].sex); printf("请输入电话:"); scanf("%s", pc->data[pos].tele); printf("请输入地址:"); scanf("%s", pc->data[pos].addr); printf("修改成功\n"); }; //按年龄排序 void SORTcontact( contact* pc) { for (int i = 0; i < pc->count - 1; i++) { for (int j = 0; j < (pc->count - 1)-i; j++) { if (pc->data[j].age > pc->data[j + 1].age) { Peoinfo tmp = pc->data[j]; pc->data[j] = pc->data[j + 1]; pc->data[j + 1] = tmp; } } } printf("排序成功\n"); };
contact.h
#include<stdio.h> #include<string.h> #include <assert.h> #include<stdlib.h> #define MAX 1000 #define NAME_MAX 10 #define SEX_MAX 10 #define TELE_MAX 20 #define ADDR_MAX 40 enum option { EXIT, ADD, DEL, SEARCH, MODIFY, SORT, PRINT, INIT }; typedef struct Peoinfo { char name[NAME_MAX];//姓名 char sex[SEX_MAX];//性别 int age;//年龄 char tele[TELE_MAX];//电话 char addr[ADDR_MAX];//地址 }Peoinfo; typedef struct contact { //创建一个大小为peoinfo结构体类型的数组 Peoinfo data[MAX]; int count; //记录当前通讯录的人数。 }contact; void INITcontact(contact* pc); void ADDcontact(contact* pc); void DELcontact(contact* pc); void SEARCHcontact(const contact* pc); void PRINTcontact(const contact* pc); void MODIFYcontact(contact* pc); void SORTcontact(const contact* pc); int FINDBYname(const contact* pc, const char name[]); void DESTORYcontact( contact* pc);
实现界面:
本篇文章内容结束,感谢大家观看。如果意见或建议,可以在评论区留言,您的点赞是我更新的动力。我们下篇文章再见。