前言

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;

}

添加功能:

打印功能 :

查找功能:

 修改功能:

 删除功能:

 排序功能:我们不妨打印出结果看看是否进行了这一步操作,从图上来看,答案当然是是进行了。

 

 由于我是初学者,以目前的能力暂时还无法与数据库连接,所以少了一个保存至文件的功能,这些数据无法被存储。后面会用链表重新写一份,还请各位大佬多多指点。

 

 

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: