/**
*案例问题
* ①数据条数 自己定的 前后一致即可
* ②结构体成员name 是单引号还是双引号的问题 汉字 == 3字节
* ③查找 修改的时候 为什么一致是查无此人 return -1;放错了地方 正确的是应该放到循环外的
* ④案例删除是真正的删除
* ⑤删除逻辑
*
*/
#include <stdio.h>
#include <string.h>
// 定义总的学生数
#define NUM 100
// 数据结构
typedef struct st
{
char name[30];
int age;
char sex[5];
/* data */
}STU;
STU s[NUM] = {
{"张三",18,"男" },
{"李四",28,"男" },
{"王嘉瑞",18,"男" }
};
// 帮助菜单显示函数定义
void help_menu() {
printf("\n");
printf(" 欢迎使用本学生信息管理系统\n");
printf("* ================================ *\n");
printf("* 1. 添加 *\n");
printf("* 2. 显示 *\n");
printf("* 3. 查询 *\n");
printf("* 4. 修改 *\n");
printf("* 5. 删除 *\n");
printf("* 6. 退出 *\n");
printf("* ================================ *\n");
}
// 现有数据条数
int n = 3;
void add() {
if (n > NUM) {
printf("容量不足\n");
return;
}
printf("请输入用户名:");
scanf("%s", s[n].name);
printf("请输入年龄:");
scanf("%d", &s[n].age);
printf("请输入性别:");
scanf("%s", s[n].sex);
printf("添加成功:姓名:%s 年龄:%d 性别:%s\n", s[n].name, s[n].age, s[n].sex);
n++;
}
void show() {
for (int i = 0; i < n; i++)
{
printf("姓名:%s 年龄:%d 性别:%s\n", s[i].name, s[i].age, s[i].sex);
}
}
// 抽离查找的代码
// 字符串比较 == s[i].name === sname strcmp
int find_index(char* p) {
for (int i = 0; i < n; i++)
{
if (strcmp(s[i].name, p) == 0) {
return i;
}
}
return -1;
}
void find() {
printf("请输入查询用户名:");
char sname[30];
scanf("%s", sname);
int i = find_index(sname);
if (i != -1)
{
printf("姓名:%s 年龄:%d 性别:%s\n", s[i].name, s[i].age, s[i].sex);
/* code */
}
else {
printf("查无此人\n");
}
printf("===%d\n", i);
}
// 修改的步骤
// 1.查询修改的哪条数据
// 2.回显
// 和添加的逻辑一致 不需要处理下标 下标就是原来数据的下标
//
void edit() {
printf("请输入修改用户名:");
char sname[30];
scanf("%s", sname);
// 查找要修改的姓名数据下标
int i = find_index(sname);
if (i != -1) {
printf("修改前的信息为:姓名:%s 年龄:%d 性别:%s\n", s[i].name, s[i].age, s[i].sex);
printf("请输入用户名:");
scanf("%s", s[i].name);
printf("请输入年龄:");
scanf("%d", &s[i].age);
printf("请输入性别:");
scanf("%s", s[i].sex);
printf("修改成功:姓名:%s 年龄:%d 性别:%s\n", s[i].name, s[i].age, s[i].sex);
}
else {
printf("未找到\n");
}
}
// 输入用户名
// 根据用户名 进行查找 return i
// 根据下标 删除对应的一条数据 i = 4 位置替换 总的条数 是发生改变的
// 今天晚上的作业 :学生管理系统
delete() {
printf("请输入修改用户名:");
char sname[30];
scanf("%s", sname);
int i = find_index(sname);
if (i != -1)
{
s[i] = s[n - 1];
printf("删除成功\n");
}
else {
printf("查无此人\n");
}
}
int main() {
// ①死循环 while while(1) while(true)
// ②提示信息 让我们输入对应的数字 scanf(%d,num);
// ③根据提示信息进行操作 switch case 1 case2
// ④根据输入的对应数字 进行相应操作 case 1 add case 2 show
while (1)
{
help_menu();
printf("请输入对应的数字:");
int num;
scanf("%d", &num);
switch (num)
{
case 1:
add();
break;
case 2:
show();
break;
case 3:
find();
break;
case 4:
edit();
break;
case 5:
delete();
break;
default:
break;
}
if (num == 6)
{
break;
}
}
return 0;
}
C语言--学生管理系统案例
最新推荐文章于 2024-08-31 18:18:12 发布