闲来无事,复习一下C语言
- 程序实现了对学生的CRUD操作
- 程序勉强可以就行扩展
需要的小伙伴可以拿走修改下即可使用
【注意】, 这不是纯C语言程序,本持续编译使用的是G++
代码如下:
/**
* 【C语言版】 学生成绩管理系统
*
* 对学生的信息进行基本的CRUD操作
*
* 学生有如下信息:
* 名字
* 性别
* 学号
* 总分
* 数学
* 外语
* 语文
* 专业
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_INFO_NUMBER 1000
#define True 1
#define False 0
struct Student
{
char *name = NULL;
char *sex = NULL;
char *id = NULL;
float mathematics = 0.0;
float english = 0.0;
float chinese = 0.0;
float major = 0.0;
};
// 学生信息表
Student student[MAX_INFO_NUMBER];
// 当前信息数
int now_info_number = 0;
// 主菜单菜单
const char *menu = ">>>> - 学生信息管理系统[C语言版] - <<<<"
"\n------------------------------------\n"
"[1] 添加学生信息\n"
"[2] 修改学生信息\n"
"[3] 查找学生信息\n"
"[4] 删除学生信息\n"
"[5] 展示所有学生信息\n"
"[Q] 退出系统\n\n"
"> 请选择 _\b";
// 将字符串拷贝到str, 通过该函数实现任意字符串长度
void strcopy(char *str, const char *string);
// 用户输入一个student
Student get_user_input_on_student();
// 将Student转为字符串
void stu_to_string(const Student stu);
// 计算总分
float stu_sum(const Student stu);
// 增加记录
void stu_info_add();
// 修改记录
void stu_info_update();
// 按学号查找记录
void stu_info_find_on_id();
// 按id删除记录
void stu_info_delete_on_id();
// 判断id是否在student中存在, 存在就返回他的索引
int is_existence(const char *id);
int is_existence(const char *id)
{
// strcmp 对比两字符串是否相等,相等返回0, 否则返回-52
for(int i = 0; i < now_info_number; i++)
if(strcmp(id, student[i].id) == 0)
return i;
return -1;
}
float stu_sum(const Student stu)
{
return stu.mathematics + stu.english + stu.chinese + stu.major;
}
void stu_to_string(const Student stu, int index, float sum)
{
printf("[%d] \t学号: %s\t", index, stu.id);
printf(" 姓名: %s\t", stu.name);
printf(" 姓别: %s\t", stu.sex);
printf(" 数学: %.1f\t", stu.mathematics);
printf(" 外语: %.1f\t", stu.english);
printf(" 语文: %.1f\t", stu.chinese);
printf(" 专业: %.1f\t", stu.major);
printf(" 总分: %.1f\t", sum);
}
void strcopy(char **str, const char *string)
{
if(*str == NULL)
*str = (char*)malloc(strlen(string) * sizeof(char));
else
*str = (char*)realloc(*str, (strlen(string) * sizeof(char)));
strcpy(*str, string);
}
Student get_user_input_on_student()
{
Student stu;
char str[125];
printf("--- 请输入 ---:\n> 姓名(string) _\b");
scanf("%s", str);
strcopy(&stu.name, str);
printf("> 学号(string) _\b");
scanf("%s", str);
strcopy(&stu.id, str);
printf("> 性别(string) _\b");
scanf("%s", str);
strcopy(&stu.sex, str);
printf("> 数学(float) _\b");
scanf("%f", &stu.mathematics);
printf("> 外语(float) _\b");
scanf("%f", &stu.english);
printf("> 语文(float) _\b");
scanf("%f", &stu.chinese);
printf("> 专业(float) _\b");
scanf("%f", &stu.major);
printf("一条数据录入成功\n");
return stu;
}
void stu_info_add()
{
printf("- 添加记录\n\n");
Student stu = get_user_input_on_student();
while(True)
{
if(is_existence(stu.id) == -1)
{
student[now_info_number++] = stu;
break;
}
else
{
printf("- 该学生学号存在重复,请修改, 输入 quit 放弃添加\n 学号 _\b");
char str[125];
scanf("%s", str);
if(is_existence(str) == -1)
{
strcopy(&stu.id, str);
student[now_info_number++] = stu;
printf("添加成功");
break;
}
else if(!strcmp(str, "quit"))
{
printf("tips -> 用户放弃了添加\n");
break;
}
}
}
}
void stu_info_update()
{
char str[125];
int index;
Student stu;
printf("> 请输入要修改的学生学号\n > 学号 _\b");
while(True)
{
scanf("%s", str);
index = is_existence(str);
if(index == -1)
{
printf("tips -> 这个学生不存在,重新输入, 输入 quit 放弃修改\n> 学号 _\b");
continue;
}
stu = get_user_input_on_student();
while(True)
{
int input_index = is_existence(stu.id);
if(input_index != index && input_index != -1)
{
printf("tips -> 输入的学生学号和其他学生学号重复,请重新输入学号\n> 学号 _\b");
scanf("%s", str);
strcopy(&stu.id, str);
}
else
break;
}
break;
}
student[index] = stu;
printf("成功添加修改该学生的记录\n");
}
void stu_info_find_on_id()
{
char str[125];
printf("> 请输入要查询的学号\n> 学号 _\b");
while(True)
{
scanf("%s", str);
int index = is_existence(str);
if(index == -1)
{
printf("没有这个学生\n");
break;
}
stu_to_string(student[index], 0, stu_sum(student[index]));
printf("\n");
break;
}
}
void stu_info_delete_on_id()
{
char str[125];
printf("> 请输入要删除的学生学号\n> 学号 _\b");
while(True)
{
scanf("%s", str);
int index = is_existence(str);
if(index == -1)
{
printf("没有这个学生\n");
break;
}
printf("该学生信息如下:\n----------------------------------");
stu_to_string(student[index], 0, stu_sum(student[index]));
printf("\n");
student[index] = student[now_info_number--];
free(student[now_info_number + 1].name);
free(student[now_info_number + 1].id);
free(student[now_info_number + 1].sex);
printf("tips -> 该生信息已删除\n");
break;
}
}
int main()
{
char str[125];
while(True)
{
printf("%s\n", menu);
scanf("%s", str);
if(strcmp(str, "1") == 0)
{
stu_info_add();
}
else if(strcmp(str, "2") == 0)
{
stu_info_update();
}
else if(strcmp(str, "3") == 0)
{
stu_info_find_on_id();
}
else if(strcmp(str, "4") == 0)
{
stu_info_delete_on_id();
}
else if(strcmp(str, "5") == 0)
{
printf("----------------------------------学生信息------------------------------------\n");
for (int i = 0; i < now_info_number; ++i)
{
stu_to_string(student[i], i+1, stu_sum(student[i]));
printf("\n");
}
printf("----------------------------------- END- ------------------------------------\n");
}
else if(strcmp(str, "Q") == 0)
{
break;
}
}
return 0;
}
END