前言
C语言学完了,知识有很多,很繁琐,相信我们多多少少积累了很多的知识和经验,那么我们不妨练练手试试几个小项目,通过编程学生信息管理系统,我们运用到了指针,数组,循环,结构体,枚举,函数等知识,本人是在VS2022环境下编译的,导致与其他的编译器略显不同。废话不多说,我们直接开始。
正文
头文件模块(contact.h):
#pragma once
#define MAX_NAME 20
#define MAX_XUEHAO 10
#define MAX_SEX 10
#define MAX_TELE 12
#define MAX_ADDR 10
#define max_xinxi 100
typedef struct stu
{
char name[MAX_NAME];
char xuehao[MAX_XUEHAO];
char sex[MAX_SEX];
char tele[MAX_TELE];
char addr[MAX_ADDR];
int age;
}stu;
struct con
{
stu data[max_xinxi];//存放添加进来的信息
int sz;//当前通信录中信息的个数
};
//初始化通讯录
void chushihua(struct con* pc);
//增加信息函数
void Addcontact(struct con* pc);
//打印信息函数
void Printcontact(const struct con* pc);
//删除信息函数
void Delcontact(struct con* pc);
//查找信息函数
void search(const struct con* pc);
//修改信息函数
void modify(struct con* pc);
//排序信息函数(按年龄进行升序)
void sort(struct con* pc);
源文件的函数实现(contact.c):
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void chushihua(struct con* pc)
{
pc->sz = 0;
//memset()--内存设置函数
memset(pc->data, 0, sizeof(pc->data));
}
void Addcontact(struct con* pc)
{
if (pc->sz == max_xinxi)
{
printf("通讯录已满,无法添加\n");
return;
}
//增加信息
printf("请输入名字:");
scanf("%s", pc->data[pc->sz].name);
printf("请输入学号:");
scanf("%s", pc->data[pc->sz].xuehao);
printf("请输入性别:");
scanf("%s", pc->data[pc->sz].sex);
printf("请输入电话:");
scanf("%s", pc->data[pc->sz].tele);
printf("请输入住址:");
scanf("%s", pc->data[pc->sz].addr);
printf("请输入年龄:");
scanf("%d", &(pc->data[pc->sz].age));
pc->sz++;
printf("添加成功!\n");
}
void Printcontact(const struct con* pc)
{
//打印标题
printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2s\n", "名字", "学号", "性别", "电话", "住址", "年龄");
//打印数据
for (int i = 0; i < pc->sz; i++)
{
printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2d\n",
pc->data[i].name,
pc->data[i].xuehao,
pc->data[i].sex,
pc->data[i].tele,
pc->data[i].addr,
pc->data[i].age);
}
}
static int findbyxuehao(struct con* pc, char xuehao[])
{
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].xuehao,xuehao)==0)//strcmp()函数查找字符串
{
return i;//找到了,并返回该学生所在数组元素的下标
}
}
return -1;//找不到
}
void Delcontact(struct con* pc)
{
char xuehao[MAX_XUEHAO] = {0};
if (pc->sz == 0)
{
printf("通讯录为空,无法删除\n");
}
printf("请输入要删除人的学号:\n");
scanf("%s",xuehao);
int pos = findbyxuehao(pc, xuehao);
if (pos == -1)
{
printf("要删除的人不存在\n");
printf("请重新选择!\n");
return;
}
for (int i = pos; i < pc->sz - 1; i++)
{
pc->data[i]= pc->data[i + 1];
}
pc->sz--;
printf("删除成功!\n");
}
void search(const struct con* pc)
{
char xuehao[MAX_XUEHAO] = { 0 };
printf("请输入要查找人的学号:\n");
scanf("%s", xuehao);
int pos = findbyxuehao(pc, xuehao);
if(pos == -1)
{
printf("要查找的人不存在\n");
printf("请重新选择!\n");
return;
}
else
{
printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2s\n", "名字", "学号", "性别", "电话", "住址", "年龄");
printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2d\n",
pc->data[pos].name,
pc->data[pos].xuehao,
pc->data[pos].sex,
pc->data[pos].tele,
pc->data[pos].addr,
pc->data[pos].age);
}
}
void modify(struct con* pc)
{
char xuehao[MAX_XUEHAO] = { 0 };
printf("请输入要修改人的学号:\n");
scanf("%s", xuehao);
int pos = findbyxuehao(pc, xuehao);
if (pos == -1)
{
printf("要修改的人不存在\n");
printf("请重新选择!\n");
return;
}
else
{
printf("请输入名字:");
scanf("%s", pc->data[pos].name);
printf("请输入学号:");
scanf("%s", pc->data[pos].xuehao);
printf("请输入性别:");
scanf("%s", pc->data[pos].sex);
printf("请输入电话:");
scanf("%s", pc->data[pos].tele);
printf("请输入住址:");
scanf("%s", pc->data[pos].addr);
printf("请输入年龄:");
scanf("%d", &(pc->data[pos].age));
printf("修改成功!\n");
}
}
void sort(struct con* pc)
{
stu tmp = {0};
for (int i = 0; i < pc->sz-1; i++)
{
for (int j = 0; j < pc->sz - 1 - i; j++)
{
if (pc->data[j].age > pc->data[j + 1].age)
{
stu tmp= pc->data[j];
pc->data[j] = pc->data[j + 1];
pc->data[j + 1]= tmp;
}
}
}
printf("按年龄升序成功,请执行下一步操作!\n");
}
源文件的菜单(test.c):
#define _CRT_SECURE_NO_WARNINGS 1
//通讯录的实现功能:要实现存放100个学生的信息
// 每个人的信息:名字+学号+性别+电话+住址+年龄
//增加学生的信息
//删除学生的信息
//查找学生的信息
//修改学生的信息
//打印学生的信息
//排序学生的信息
#include
#include
#include
#include"contact.h"
void menu()
{
printf(" --------------------------------------------------\n");
printf("| 学生信息管理系统 | \n");
printf("| (1)添加 |\n");
printf("| (2)删除 |\n");
printf("| (3)查找 |\n");
printf("| (4)修改 |\n");
printf("| (5)打印 |\n");
printf("| (6)排序 |\n");
printf("| (0)退出 |\n");
printf(" --------------------------------------------------\n");
}
enum option {
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
PRINT,
SORT,
};
int main()
{
int input=0;
struct con stu1;
chushihua(&stu1);
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case ADD:
//增加信息
Addcontact(&stu1);
break;
case DEL:
//删除信息
Delcontact(&stu1);
break;
case SEARCH:
//查找信息
search(&stu1);
break;
case MODIFY:
//修改信息
modify(&stu1);
break;
case PRINT:
//打印信息
Printcontact(&stu1);
break;
case SORT:
//排序信息
sort(&stu1);
break;
case EXIT:
//退出
printf("退出通讯录\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
添加功能:
打印功能 :
查找功能:
修改功能:
删除功能:
排序功能:我们不妨打印出结果看看是否进行了这一步操作,从图上来看,答案当然是是进行了。
由于我是初学者,以目前的能力暂时还无法与数据库连接,所以少了一个保存至文件的功能,这些数据无法被存储。后面会用链表重新写一份,还请各位大佬多多指点。
好文推荐
发表评论