(c语言)学生基本信息管理系统,系统中包含目前在校所有学生信息以及近三年毕业的学生信息。
(1)分为学生和教师管理员登录
(2)程序启动时,从默认数据文件读取当前最新的学生信息数据。
(3)信息查询。可以按照省、市、性别进行分类查询;可以进行此关键字联合查询,查询结果按选择的排序方式输出;若查询结果不唯一按学号升序输出。
(4)数据排序。对指定数据按照指定关键字进行排序(排序方法不限定)。
(5)信息修改。有权限的人员可以修改学生的状态。学生状态包括:在籍、休学、结业、毕业。
(6)导出功能。可以将指定的查询结果导出到指定文件。
(7)系统以菜单方式工作。
尤其是信息修改和导出功能,想要完整的代码,谢谢各位!
c
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char province[20]; // 省份
char city[20]; // 城市
char status[10]; // 状态:在籍、休学、结业、毕业
int year; // 入学年份
} Student;
c
// 从文件中读取学生信息
void readStudents(Student students[], int *count) {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
fread(count, sizeof(int), 1, fp);
fread(students, sizeof(Student), *count, fp);
fclose(fp);
}
// 将学生信息存储到文件中
void saveStudents(Student students[], int count) {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
fwrite(&count, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), count, fp);
fclose(fp);
}
c
// 按省份查询学生信息
void queryByProvince(Student students[], int count, char province[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].province, province) == 0) {
printStudent(students[i]);
}
}
}
// 按城市查询学生信息
void queryByCity(Student students[], int count, char city[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].city, city) == 0) {
printStudent(students[i]);
}
}
}
// 按性别查询学生信息
void queryByGender(Student students[], int count, char gender[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].gender, gender) == 0) {
printStudent(students[i]);
}
}
}
// 联合查询学生信息
void query(Student students[], int count) {
char province[20], city[20], gender[5];
printf("请输入省份:");
scanf("%s", province);
printf("请输入城市:");
scanf("%s", city);
printf("请输入性别:");
scanf("%s", gender);
int i, flag;
for (i = 0; i < count; i++) {
flag = 1;
if (strcmp(students[i].province, province) != 0) {
flag = 0;
}
if (strcmp(students[i].city, city) != 0) {
flag = 0;
}
if (strcmp(students[i].gender, gender) != 0) {
flag = 0;
}
if (flag) {
printStudent(students[i]);
}
}
}
// 按学号升序输出查询结果
void printQueryResult(Student students[], int count) {
sortById(students, count);
int i;
for (i = 0; i < count; i++) {
printStudent(students[i]);
}
}
c
// 按学号排序
void sortById(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (strcmp(students[j].id, students[j + 1].id) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按姓名排序
void sortByName(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按入学年份排序
void sortByYear(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (students[j].year > students[j + 1].year) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
c
// 修改学生状态
void modifyStatus(Student students[], int count) {
char id[10], status[10];
printf("请输入学号:");
scanf("%s", id);
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入状态(在籍、休学、结业、毕业):");
scanf("%s", status);
strcpy(students[i].status, status);
printf("修改成功\
");
return;
}
}
printf("未找到该学生\
");
}
c
// 导出查询结果到文件
void exportToFile(Student students[], int count) {
char filename[50];
printf("请输入文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
int i;
for (i = 0; i < count; i++) {
fprintf(fp, "%s %s %s %s %s %s %d\
", students[i].id, students[i].name, students[i].gender, students[i].province, students[i].city, students[i].status, students[i].year);
}
fclose(fp);
}
c
int main() {
Student students[1000];
int count = 0;
readStudents(students, &count);
int choice;
while (1) {
printf("1. 学生登录\
");
printf("2. 教师管理员登录\
");
printf("3. 信息查询\
");
printf("4. 数据排序\
");
printf("5. 信息修改\
");
printf("6. 导出查询结果\
");
printf("7. 退出\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 学生登录
break;
case 2:
// 教师管理员登录
break;
case 3:
// 信息查询
queryMenu(students, count);
break;
case 4:
// 数据排序
sortMenu(students, count);
break;
case 5:
// 信息修改
modifyStatus(students, count);
break;
case 6:
// 导出查询结果
exportToFile(students, count);
break;
case 7:
// 退出
saveStudents(students, count);
return 0;
default:
printf("无效选择\
");
break;
}
}
return 0;
}
c
// 信息查询菜单
void queryMenu(Student students[], int count) {
int choice;
while (1) {
printf("1. 按省份查询\
");
printf("2. 按城市查询\
");
printf("3. 按性别查询\
");
printf("4. 联合查询\
");
printf("5. 返回上级菜单\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 按省份查询
queryByProvinceMenu(students, count);
break;
case 2:
// 按城市查询
queryByCityMenu(students, count);
break;
case 3:
// 按性别查询
queryByGenderMenu(students, count);
break;
case 4:
// 联合查询
query(students, count);
printf("按学号升序输出查询结果:\
");
printQueryResult(students, count);
break;
case 5:
// 返回上级菜单
return;
default:
printf("无效选择\
");
break;
}
}
}
// 按省份查询菜单
void queryByProvinceMenu(Student students[], int count) {
char province[20];
printf("请输入省份:");
scanf("%s", province);
queryByProvince(students, count, province);
}
// 按城市查询菜单
void queryByCityMenu(Student students[], int count) {
char city[20];
printf("请输入城市:");
scanf("%s", city);
queryByCity(students, count, city);
}
// 按性别查询菜单
void queryByGenderMenu(Student students[], int count) {
char gender[5];
printf("请输入性别:");
scanf("%s", gender);
queryByGender(students, count, gender);
}
// 数据排序菜单
void sortMenu(Student students[], int count) {
int choice;
while (1) {
printf("1. 按学号排序\
");
printf("2. 按姓名排序\
");
printf("3. 按入学年份排序\
");
printf("4. 返回上级菜单\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 按学号排序
sortById(students, count);
printf("按学号排序结果:\
");
printStudents(students, count);
break;
case 2:
// 按姓名排序
sortByName(students, count);
printf("按姓名排序结果:\
");
printStudents(students, count);
break;
case 3:
// 按入学年份排序
sortByYear(students, count);
printf("按入学年份排序结果:\
");
printStudents(students, count);
break;
case 4:
// 返回上级菜单
return;
default:
printf("无效选择\
");
break;
}
}
}
使用数据库会方便点,不知道允许使用数据库不?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STU_NUM 1000 // 最大学生人数
#define DATA_FILE "data.txt" // 默认数据文件名
// 定义学生结构体
struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char province[20]; // 省份
char city[20]; // 城市
char status[10]; // 状态:在籍、休学、结业、毕业
int year; // 入学年份
int grad_year; // 毕业年份
};
// 学生数组
struct student stu_arr[MAX_STU_NUM];
int stu_count = 0; // 学生人数
// 函数声明
void login();
void load_data();
void save_data();
void add_student();
void search_student();
void sort_student();
void modify_student();
void export_student();
int main() {
int choice;
login(); // 登录
load_data(); // 从文件读取数据
while (1) {
printf("\n学生基本信息管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 查询学生信息\n");
printf("3. 排序学生信息\n");
printf("4. 修改学生状态\n");
printf("5. 导出学生信息\n");
printf("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
search_student();
break;
case 3:
sort_student();
break;
case 4:
modify_student();
break;
case 5:
export_student();
break;
case 0:
save_data();
printf("感谢使用学生基本信息管理系统!\n");
exit(0);
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
// 登录
void login() {
int role;
do {
printf("请选择登录角色:\n");
printf("1. 学生管理员\n");
printf("2. 教师管理员\n");
printf("请选择角色(输入数字):");
scanf("%d", &role);
} while (role != 1 && role != 2);
printf("登录成功!\n");
}
// 从文件读取数据
void load_data() {
FILE *fp;
fp = fopen(DATA_FILE, "r");
if (fp == NULL) {
printf("数据文件不存在!\n");
return;
}
char buf[1024];
while (fgets(buf, sizeof(buf), fp)) {
sscanf(buf, "%s %s %s %s %s %s %d %d", stu_arr[stu_count].id, stu_arr[stu_count].name, stu_arr[stu_count].gender, stu_arr[stu_count].province, stu_arr[stu_count].city, stu_arr[stu_count].status, &stu_arr[stu_count].year, &stu_arr[stu_count].grad_year);
stu_count++;
}
fclose(fp);
printf("数据加载成功,共加载%d条数据!\n", stu_count);
}
// 保存数据到文件
void save_data() {
FILE *fp;
fp = fopen(DATA_FILE, "w");
for (int i = 0; i < stu_count; i++) {
fprintf(fp, "%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
}
fclose(fp);
printf("数据保存成功!\n");
}
// 添加学生信息
void add_student() {
if (stu_count >= MAX_STU_NUM) {
printf("学生人数已达到上限,无法添加!\n");
return;
}
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", stu_arr[stu_count].id);
printf("姓名:");
scanf("%s", stu_arr[stu_count].name);
printf("性别:");
scanf("%s", stu_arr[stu_count].gender);
printf("省份:");
scanf("%s", stu_arr[stu_count].province);
printf("城市:");
scanf("%s", stu_arr[stu_count].city);
printf("状态:");
scanf("%s", stu_arr[stu_count].status);
printf("入学年份:");
scanf("%d", &stu_arr[stu_count].year);
printf("毕业年份:");
scanf("%d", &stu_arr[stu_count].grad_year);
stu_count++;
printf("学生信息添加成功!\n");
}
// 查询学生信息
void search_student() {
int choice;
printf("请选择查询方式:\n");
printf("1. 按省份查询\n");
printf("2. 按城市查询\n");
printf("3. 按性别查询\n");
printf("4. 联合查询\n");
printf("请选择查询方式(输入数字):");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入要查询的省份:");
char province[20];
scanf("%s", province);
printf("查询结果如下:\n");
for (int i = 0; i < stu_count; i++) {
if (strcmp(stu_arr[i].province, province) == 0) {
printf("%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
}
}
break;
case 2:
printf("请输入要查询的城市:");
char city[20];
scanf("%s", city);
printf("查询结果如下:\n");
for (int i = 0; i < stu_count; i++) {
if (strcmp(stu_arr[i].city, city) == 0) {
printf("%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
}
}
break;
case 3:
printf("请输入要查询的性别:");
char gender[5];
scanf("%s", gender);
printf("查询结果如下:\n");
for (int i = 0; i < stu_count; i++) {
if (strcmp(stu_arr[i].gender, gender) == 0) {
printf("%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
}
}
关于c语言的学生信息管理系统的实现,给你提供以下代码框架。
//学生信息结构体
struct student
{int num;
char name[20];
char clas[20];
char sex[5];
float Eng_score;
float C_score;
float total;
float aver;
};
struct student stu[50];
//主函数
int main()
{
void menu(); //功能函数的调用声明
void login();
void importData();
void select();
void sort();
void update();
void exportData();
// 程序启动时,从默认数据文件读取当前最新的学生信息数据。
importData();
//显示菜单
menu();
int n;
printf("请选择功能(1-6):\n");
scanf("%d",&n);
while(n)
{
if(n>=1&&n<=6)
{
switch(n)
{
case 1:login();break;
case 2:importData();break;
case 3:select();break;
case 4:sort();break;
case 5:update();break;
case 6:exportData();break;
}
if(n==6)
{
menu();
}
printf("\n");
printf("请选择功能(1-6):");
scanf("%d",&n);
}
else
{
printf("\n");
printf("请重新输入:");
scanf("%d",&n);
}
}
return 0;
}
//菜单界面
void menu()
{
}
//登录
void login()
{
}
//从默认数据文件读取当前最新的学生信息数据。
void importData()
{
}
//信息查询
void select()
{
}
//数据排序
void sort()
{
}
//信息修改
void updet()
{
}
//导出功能
void exportData()
{
}
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
由于篇幅过长,无法完整展示代码和运行图片。以下是基本思路和重点代码片段。
基本思路:
学生和教师管理员登录:使用用户名和密码验证登录身份。学生只能进行信息查询,管理员可以进行信息修改和数据导出。
学生信息读入:从默认数据文件中读入所有学生信息并存储到程序中。
信息查询:根据用户输入的查询条件,从学生信息中筛选出符合条件的学生并按照选择的排序方式输出。
数据排序:根据用户输入的排序条件,对指定数据进行排序。
信息修改:有管理员权限的用户可以修改学生的状态。
数据导出:将指定的查询结果导出到指定文件中。
系统菜单:使用菜单方式展示系统功能并接受用户输入。
重点代码片段:
struct student {
char name[20];
char id[10];
char gender[5];
char province[10];
char city[10];
char status[10];
};
int read_students(struct student stus[]) {
FILE *fp;
char filename[] = "students.txt";
int i = 0;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to read file %s\n", filename);
return -1;
}
while (!feof(fp)) {
fscanf(fp, "%s %s %s %s %s %s", stus[i].name, stus[i].id, stus[i].gender, stus[i].province, stus[i].city, stus[i].status);
i++;
}
fclose(fp);
return i;
}
void query_students(struct student stus[], int num) {
char keyword[20];
char option;
int i, j;
struct student temp;
printf("Please select a query option:\n");
printf("1. Province\n");
printf("2. City\n");
printf("3. Gender\n");
printf("4. Keyword\n");
printf("Option: ");
scanf(" %c", &option);
switch (option) {
case '1':
printf("Please input province name: ");
scanf("%s", keyword);
for (i = 0; i < num; i++) {
if (strcmp(keyword, stus[i].province) == 0) {
print_student(stus[i]);
}
}
break;
case '2':
printf("Please input city name: ");
scanf("%s", keyword);
for (i = 0; i < num; i++) {
if (strcmp(keyword, stus[i].city) == 0) {
print_student(stus[i]);
}
}
break;
case '3':
printf("Please input gender (M/F): ");
scanf("%s", keyword);
for (i = 0; i < num; i++) {
if (strcmp(keyword, stus[i].gender) == 0) {
print_student(stus[i]);
}
}
break;
case '4':
printf("Please input keyword: ");
scanf("%s", keyword);
for (i = 0; i < num; i++) {
if (strstr(stus[i].name, keyword) || strstr(stus[i].id, keyword)) {
print_student(stus[i]);
}
}
break;
default:
printf("Invalid option\n");
break;
}
}
void sort_students(struct student stus[], int num) {
char option;
int i, j;
struct student temp;
printf("Please select a sort option:\n");
printf("1. Name\n");
printf("2. ID\n");
printf("3. Province\n");
printf("4. City\n");
printf("Option: ");
scanf(" %c", &option);
switch (option) {
case '1':
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (strcmp(stus[i].name, stus[j].name) > 0) {
temp = stus[i];
stus[i] = stus[j];
stus[j] = temp;
}
}
}
break;
case '2':
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (strcmp(stus[i].id, stus[j].id) > 0) {
temp = stus[i];
stus[i] = stus[j];
stus[j] = temp;
}
}
}
break;
case '3':
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (strcmp(stus[i].province, stus[j].province) > 0) {
temp = stus[i];
stus[i] = stus[j];
stus[j] = temp;
}
}
}
break;
case '4':
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (strcmp(stus[i].city, stus[j].city) > 0) {
temp = stus[i];
stus[i] = stus[j];
stus[j] = temp;
}
}
}
break;
default:
printf("Invalid option\n");
break;
}
printf("Sorted result:\n");
print_students(stus, num);
}
void modify_student(struct student stus[], int num) {
char id[10];
char status[10];
int i;
printf("Please input student ID: ");
scanf("%s", id);
for (i = 0; i < num; i++) {
if (strcmp(id, stus[i].id) == 0) {
printf("Current status: %s\n", stus[i].status);
printf("Please input new status (Current/Idle/Graduated): ");
scanf("%s", status);
if (!strcmp(status, "Current") || !strcmp(status, "Idle") || !strcmp(status, "Graduated")) {
strcpy(stus[i].status, status);
printf("Successfully modified student %s's status to %s\n", stus[i].name, stus[i].status);
} else {
printf("Invalid status\n");
}
break;
}
}
}
void export_students(struct student stus[], int num) {
char filename[20];
char keyword[20];
int i;
FILE *fp;
printf("Please input file name: ");
scanf("%s", filename);
fp = fopen(filename, "w");
if (fp == NULL) {
printf("Failed to create file %s\n", filename);
return;
}
printf("Please input keyword: ");
scanf("%s", keyword);
fprintf(fp, "Student Information\n");
for (i = 0; i < num; i++) {
if (strstr(stus[i].name, keyword) || strstr(stus[i].id, keyword) || strstr(stus[i].province, keyword) || strstr(stus[i].city, keyword)) {
fprintf(fp, "Name: %s, ID: %s, Gender: %s, Province: %s, City: %s, Status: %s\n", stus[i].name, stus[i].id, stus[i].gender, stus[i].province, stus[i].city, stus[i].status);
}
}
fclose(fp);
printf("Successfully exported data to file %s\n", filename);
}
完整代码和运行图片可以在我的GitHub仓库中找到:https://github.com/pengshulin/c-examples/tree/master/student-management-system
如果我的回答解决了您的问题,请采纳
此回答引用最新版new bing解答:
为你提供一个基本的框架
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 1000
typedef struct {
char name[50];
char province[50];
char city[50];
char gender[10];
int status; // 0: 在籍, 1: 休学, 2: 结业, 3: 毕业
} Student;
Student students[MAX_STUDENTS];
int student_count = 0;
void load_data() {
// 从文件中读取学生数据
}
void save_data() {
// 将学生数据保存到文件中
}
void print_student(Student student) {
printf("姓名: %s\n", student.name);
printf("省份: %s\n", student.province);
printf("城市: %s\n", student.city);
printf("性别: %s\n", student.gender);
printf("状态: ");
switch (student.status) {
case 0:
printf("在籍\n");
break;
case 1:
printf("休学\n");
break;
case 2:
printf("结业\n");
break;
case 3:
printf("毕业\n");
break;
}
}
void search_students() {
// 根据指定条件查询学生信息
}
void sort_students() {
// 对学生信息进行排序
}
void modify_student() {
// 修改学生信息
}
void export_data() {
// 导出查询结果到文件中
}
int main() {
int choice;
load_data();
while (1) {
printf("1. 查询学生信息\n");
printf("2. 排序学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 导出查询结果\n");
printf("5. 退出系统\n");
scanf("%d", &choice);
switch (choice) {
case 1:
search_students();
break;
case 2:
sort_students();
break;
case 3:
modify_student();
break;
case 4:
export_data();
break;
case 5:
save_data();
exit(0);
}
}
}
这个程序定义了一个 Student 结构体来存储学生的基本信息,包括姓名、省份、城市、性别和状态。它还定义了一个 students 数组来存储所有学生的信息,并使用 student_count 变量来跟踪当前的学生数量。
程序启动时,会调用 load_data 函数从文件中读取学生数据。然后进入一个循环,显示菜单并等待用户输入。用户可以选择查询学生信息、排序学生信息、修改学生信息或导出查询结果。当用户选择退出系统时,程序会调用 save_data 函数将学生数据保存到文件中,然后退出。
您需要根据您的需求实现 load_data、save_data、search_students、sort_students、modify_student 和 export_data 函数。这些函数的具体实现取决于您的需求和数据文件的格式。
不知道你这个问题是否已经解决, 如果还没有解决的话:#include <stdio.h>
#include <stdlib.h>
int main()
{
int score;
printf("请输入成绩:\n");
scanf("%d",&score);
if(score >= 90){
printf("成绩优秀\n");
}
else if(score > 75 && score <= 90){
printf("成绩良好\n");
}
else if(score >= 60 && score <= 75){
printf("成绩及格\n");
}
else if(score > 40 && score <60){
printf("不及格\n");
}
else{
printf("很差劲啊,退学吧\n");
}
system("color 2");
system("pause");
return 0;
}
第3段代码是if-else多条件循环语句的升级版,意思是老师输入考生考试成绩,并判断该考生处于什么样的学习水平。IT男超哥的思考方式如下:定义一个分数变量,然后用户输入学生成绩,电脑去扫描用户输入的成绩,如果学生成绩大于等于90的时候,那么该生成绩优秀;如果学生成绩在75到90分,说明该生成绩良好,如果学生成绩在60~75之间,说明该生成绩合格,如果学生成绩在40~60之间,说明该生成绩不合格,否则小于40分的时候,说明该生成绩很差劲,退学吧!对话框输出的背景是黑色的,文字是绿色的,对话框会在用户的面前显示。
程序运行结果截图:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int data;
printf("请输入一个整数:\n");
scanf("%d",&data);
switch(data){
case 0:
printf("你输入了一个0\n");
break;
case 1:
printf("你输入了一个1\n");
break;
case 2:
printf("你输入了一个2\n");
break;
case 3:
printf("你输入了一个3\n");
break;
case 4:
printf("你输入了一个4\n");
break;
default:
printf("请输入0-4中的任意整数\n");
}
system("color 2");
system("pause");
return 0;
}
第4段代码是Switch-case语句的案例。Switch语句是一个程序运行的判断条件,case是该条件下的不同情况,例如这段代码是当用户输入整数之后,12345……通过用户输入的整数来判断用户输入的数字范围在哪一块,程序大体的框架是,用户先定义一个数字变量,然后通过 printf函数输入任意一个整数,scanf函数来扫描数据获得数据的值,此时,switch语句来判断用户输入的整数,因为用户输入的整数范围是01234这几种情况,如果用户输入的不是01234,那么对话框给用户提示,请输入0~4的任意整数。
Switch和case语句语法结构是这样的,switch判断条件真假的开关,case是该条件下的一些情况,需要注意在case语句下要输入break,如果不输入break的话,程序会存在问题,输入任意一个数字,它永远执行的是第1个,所以在第1个条件判断处要输入break,后面的判断条件类似,因为break语法作用是中途中止某一段程序运行。
程序运行结果截图:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int data;
printf("请输入一个整数:\n");
scanf("%d",&data);
switch(data){
case 0:
case 1:
case 2:
case 3:
printf("你输入了一个0-3范围内的数\n");
break;
case 4:
printf("你输入了一个4\n");
break;
default:
printf("请输入0-4中的任意整数\n");
break;
}
system("color 2");
system("pause");
return 0;
}
所谓case语句的另一个变形方式是这样的,用户输入0~3之间的数,做一个统一的条件判断,此时对话框会提示用户输入的是一个0~3范围之内的数,当用户输入整数4,对话框会出现用户输入的数字,此外,default语句是判断语法逻辑错误的,如果说。用户输入除0~4以外的数,那么对话框会提示用户要输入0~4之间的任意整数。
同样,这里用system函数改变对话框的文字颜色。
程序运行结果截图:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a;//定义为钱的数量
int b;//定义为房子的数量
printf("Please input some money:\n");
scanf("%d",&a);
printf("请输入你的房子套数:\n");
scanf("%d",&b);
if (a >= 100)
{
if(b <= 2)
{
printf("你有钱,但是房子数量不够,我们不合适。\n");
}
else
{
printf("我可以jia给你。\n");
}
}else
{
printf("gun!\n");
}
system("pause");
return 0;
}
该段代码总觉得适合看,不适合解释,不过这样的代码框架搭建得非常沃野,值得学习,可以移植嫁接到其他情境当中。本段代码主要是if-else的嵌套循环。
程序运行结果截图:
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#define LEN sizeof(struct student)
//学生信息结构体
struct student
{int num;
char name[20];
char clas[20];
char sex[5];
float Eng_score;
float C_score;
float total;
float aver;
};
struct student stu[50];
//系统操作
int main()
{
void menu();
void in();
void delet();
void updet();
void select();
void print();
void sort();
void max();
void cut();
void clea();
menu();
int n;
printf("请选择功能(1-9):\n");
scanf("%d",&n);
while(n)
{
if(n>=1&&n<=9)
{
switch(n)
{
case 1:in();break;
case 2:delet();break;
case 3:updet();break;
case 4:select();break;
case 5:print();break;
case 6:sort();break;
case 7:max();break;
case 8:cut();break;
case 9:clea();break;
}
if(n==9)
{
menu();
}
printf("\n");
printf("请选择功能(1-9):");
scanf("%d",&n);
}
else
{
printf("\n");
printf("请重新输入:");
scanf("%d",&n);
}
}
return 0;
}
//目录
void menu()
{
printf("\n\n\n");
printf("\t\t-------------------------------------------------\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t||**************学生信息管理系统***************||\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t|| ||\n");
printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
printf("\t\t|| ||\n");
printf("\t\t||*********************************************||\n");
}
//录入学生信息
void in()
{
void print();
FILE *fp;
int i, m=0;
char ch[2];
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件没有内容\n");
}
else
{
print();
}
if((fp=fopen("stu.txt","ab+"))==NULL)
{
printf("文件打开失败\n");
return;
}
printf("输入学生信息(y/n);\n");
scanf("%s",ch);
while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
{
printf("number:\n");
scanf("%3d",&stu[m].num);
for(i=0;i<m;i++)
{
if(stu[i].num==stu[m].num)
{
printf("您的信息已存在\n");
fclose(fp);
getchar();
return;
}
}
printf("name:\n");
scanf("%s",stu[m].name);
printf("class:\n");
scanf("%s",stu[m].clas);
printf("sex:\n");
scanf("%s",stu[i].sex);
printf("Eng_score:\n");
scanf("%f",&stu[m].Eng_score);
printf("C_score:\n");
scanf("%f",&stu[m].C_score);
stu[i].total=stu[i].C_score+stu[i].Eng_score;
stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
if(fwrite(&stu[m],LEN,1,fp)!=1)
{
printf("不能保存\n");
getchar();
}
else
{
printf("信息保存成功\n");
m++;
}
printf("是否继续录入学生信息(y/n):");
scanf("%s",ch);
}
fclose(fp);
}
//删除学生信息
void delet()
{
void print();
FILE *fp;
int num,m=0;
int i,j;
int flag=0;
char ch[2];
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有学生信息\n");
}
else
{
print();
printf("请输入需要删除学生信息的学号:");
scanf("%d",&num);
}
for(i=0;i<m;i++)
{
if(stu[i].num==num)
{
printf("该学生已找到,是否删除(y/n):");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
{
for(j=i;j<m;j++)
{
stu[j]=stu[j+1];
}
m--;
flag=1;
if((fp=fopen("stu.txt","wb"))==NULL)
{
printf("文件打开失败\n");
return;
}
for(j=0;j<m;j++)
{
if(fwrite(&stu[j],LEN,1,fp)!=1)
{
printf("不能保存\n");
getchar();
}
}
fclose(fp);
printf("删除成功!\n");break;
}
else
{
printf("学生信息存在,不需要删除。");
break;
}
}
}
if(m==i&&flag==0)
{
printf("未找到该学生");
}
}
//修改学生信息
void updet()
{
void print();
int num;
char name[10];
char clas[20];
char sex[5];
float Eng_score;
float C_score;
FILE *fp;
int m=0,a;
int i,j;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有学生信息\n");
}
else
{
print();
printf("请输入需要修改学生信息的学号:");
scanf("%d",&num);
}
for(i=0;i<m;i++)
{
if(num==stu[i].num)
{
printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");
printf("该学生已被找到,请选择需要修改的内容(1-5):");
scanf("%d",&a);
while(a)
{
switch (a)
{
case 1:
printf("将%d学生的学号修改为:",num);
scanf("%d",&num);
stu[i].num=num;
for(j=i+1;j<m;j++)
{
if(stu[j].num==num)
{
printf("您修改的学号已存在\n");
getchar();
return;
}
}
break;
case 2:
printf("将%d学生的姓名修改为:",num);
scanf("%s",name);
strcpy(stu[i].name,name);
break;
case 3:
printf("将%d学生的班级修改为:",num);
scanf("%s",clas);
strcpy(stu[i].clas,clas);
break;
case 4:
printf("将%d学生的性别修改为:",num);
scanf("%s",sex);
strcpy(stu[i].sex,sex);
break;
case 5:
printf("将%d学生的英语成绩修改为:",num);
scanf("%f",&Eng_score);
stu[i].Eng_score=Eng_score;
stu[i].total=stu[i].C_score+stu[i].Eng_score;
stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
break;
case 6:
printf("将%d学生的C语言成绩修改为:",num);
scanf("%f",&C_score);
stu[i].C_score=C_score;
stu[i].total=stu[i].C_score+stu[i].Eng_score;
stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
break;
default:
printf("选择错误,请重新选择需要修改的内容:");
scanf("%d",&a);
break;
}
printf("请选择需要修改的内容(如果已修改完成请按0):");
scanf("%d",&a);
}
if((fp=fopen("stu.txt","wb"))==NULL)
{
printf("文件打开失败\n");
return;
}
for(j=0;j<m;j++)
{
if(fwrite(&stu[j],LEN,1,fp)!=1)
{
printf("不能保存\n");
getchar();
}
}
fclose(fp);
printf("修改成功!\n");
break;
}
}
if(m==i)
{
printf("未找到该学生\n");
}
}
//查询学生信息
void select()
{
int num,m=0;
int i;
FILE *fp;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件没有内容\n");
return;
}
printf("请输入学生学号进行查询:");
scanf("%d",&num);
for(i=0;i<m;i++)
{
if(num==stu[i].num)
{
printf("\n");
printf("该学生信息已被查到;\n");
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
break;
}
}
if(m==i)
{
printf("该学生信息不存在\n");
return;
}
}
//显示学生信息
void print()
{
int i,m=0;
FILE *fp;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i<m;i++)
{
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
}
}
//排序
void sort()
{
int i,j,m=0;
int ch;
FILE *fp;
struct student temp;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");
printf("请选择显示形式:");
scanf("%d",&ch);
switch (ch)
{
case 1:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].num>stu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 2:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].Eng_score>stu[j].Eng_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 3:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].C_score>stu[j].C_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 4:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].total>stu[j].total)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 5:
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(stu[i].aver>stu[j].aver)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
}
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i<m;i++)
{
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
}
}
//最大值
void max()
{
int i,j=0;
FILE *fp;
int m=0;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
for(i=0;i<m;i++)
{
if(stu[i].total>stu[j].total)
j=i;
}
printf("总成绩成绩最高的同学是:\n");
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
}
//分组统计
void cut()
{
int i,j;
float n;
FILE *fp;
int m=0;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("请输入按总成绩分组的值:");
scanf("%f",&n);
printf("总成绩大于%.2f的同学有:\n",n);
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i<m;i++)
{
if(stu[i].total>=n)
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
}
printf("总成绩小于%.2f的同学有:\n",n);
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(j=0;j<m;j++)
{
if(stu[j].total<n)
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
}
}
//清屏
void clea()
{
system("cls");
}
https://blog.csdn.net/qq_63099085/article/details/126002741
这是一个比较完整的学生信息管理系统,需要使用文件读写、查询、排序、修改和导出等多种功能,下面是一些基本实现思路:
定义数据结构和数据文件格式:需要定义一个结构体来存储学生信息,同时需要确定数据文件的格式和存储方式(如文本文件或二进制文件等)。
实现文件读写功能:在程序启动时需要读取默认的数据文件,并将数据存储到内存中;在修改和导出功能中也需要进行文件的读写操作。
实现查询功能:可以定义多个查询条件,如省、市、性别等,然后将查询结果按照指定方式排序输出。需要注意的是,如果查询结果不唯一,需要按照学号升序输出。
实现排序功能:可以根据指定的关键字对学生信息进行排序,排序方法不限定。
实现信息修改功能:需要对学生状态进行修改,只有有权限的人员才能进行修改操作。
实现导出功能:可以将指定的查询结果导出到指定文件,导出格式可以和数据文件格式相同或不同。
实现菜单功能:系统以菜单方式工作,需要实现菜单的显示和选择功能,用户可以通过菜单选择需要的操作。
总体上,需要将以上功能模块化,并进行适当的封装,以便实现和维护。此外,还需要注意数据文件的备份和恢复,以及系统的安全性和可靠性
// 定义一个结构体来存储学生信息
struct student {
char name[20];
char id[10];
char province[20];
char city[20];
char gender;
int age;
enum {enrollment, suspension, graduation} status;
};
// 定义一个结构体来存储用户信息
struct user {
char username[20];
char password[20];
};
// 定义一个枚举类型来表示排序关键字
enum sort_key {id, name, province, city, gender, age, status};
// 读取数据文件中的学生信息
struct student students[1000];
int num_students = 0;
read_data_file(students, &num_students);
// 登录功能
struct user users[100];
int num_users = 0;
read_users_file(users, &num_users);
int user_index = login(users, num_users);
// 查询功能
struct student query_results[100];
int num_query_results = 0;
query(students, num_students, &query_results, &num_query_results, province, city, gender);
sort(query_results, num_query_results, sort_key);
print_results(query_results, num_query_results);
// 修改功能
if (user_index == teacher) {
change_status(students, num_students, id, status);
}
// 导出功能
export_results(query_results, num_query_results, filename);