赞
踩
C语言学完了,知识有很多,很繁琐,相信我们多多少少积累了很多的知识和经验,那么我们不妨练练手试试几个小项目,通过编程学生信息管理系统,我们运用到了指针,数组,循环,结构体,枚举,函数等知识,本人是在VS2022环境下编译的,导致与其他的编译器略显不同。废话不多说,我们直接开始。
- #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);
- #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");
- }
- #define _CRT_SECURE_NO_WARNINGS 1
- //通讯录的实现功能:要实现存放100个学生的信息
- // 每个人的信息:名字+学号+性别+电话+住址+年龄
- //增加学生的信息
- //删除学生的信息
- //查找学生的信息
- //修改学生的信息
- //打印学生的信息
- //排序学生的信息
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #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;
- }
由于我是初学者,以目前的能力暂时还无法与数据库连接,所以少了一个保存至文件的功能,这些数据无法被存储。后面会用链表重新写一份,还请各位大佬多多指点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。