要求用C语言风格写一段程序设计 实现以下功能 1、数据输入 2、数据显示 3、数据追加 4、数据查询 按学号查询 按姓名查询 按楼号查询 按寝室号查询 5、数据修改 6、数据统计 7、数据删除 8、数据保存 9、数据读取 10、退出程序
时间: 2023-12-23 17:03:24 浏览: 56
好的,根据您的需求,我可以为您提供以下C语言程序段:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 100
struct student{
char id[10]; //学号
char name[20]; //姓名
int building; //楼号
int dorm; //寝室号
}stu[MAX_SIZE];
int count = 0; //学生人数
void menu(){ //菜单界面
printf("\n");
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("7、数据删除\n");
printf("8、数据保存\n");
printf("9、数据读取\n");
printf("10、退出程序\n");
printf("\n");
}
void input(){ //数据输入
if(count >= MAX_SIZE){
printf("人数已到达最大值,无法继续添加\n");
return;
}
printf("请输入学号、姓名、楼号、寝室号,以空格分隔:\n");
scanf("%s%s%d%d", stu[count].id, stu[count].name, &stu[count].building, &stu[count].dorm);
count ++;
printf("数据输入成功!\n");
}
void output(){ //数据显示
if(count == 0){
printf("暂无数据\n");
return;
}
printf("序号\t学号\t姓名\t楼号\t寝室号\n");
for(int i=0; i<count; i++){
printf("%d\t%s\t%s\t%d\t%d\n", i+1, stu[i].id, stu[i].name, stu[i].building, stu[i].dorm);
}
}
void append(){ //数据追加
if(count >= MAX_SIZE){
printf("人数已到达最大值,无法继续添加\n");
return;
}
printf("请输入要追加的学生信息:\n");
scanf("%s%s%d%d", stu[count].id, stu[count].name, &stu[count].building, &stu[count].dorm);
count ++;
printf("数据追加成功!\n");
}
void search(){ //数据查询
int type;
printf("按学号查询请输入1,按姓名查询请输入2,按楼号查询请输入3,按寝室号查询请输入4:\n");
scanf("%d", &type);
char keyword[20];
printf("请输入查询关键字:\n");
scanf("%s", keyword);
int flag = 0;
printf("序号\t学号\t姓名\t楼号\t寝室号\n");
for(int i=0; i<count; i++){
if(type == 1 && strcmp(stu[i].id, keyword) == 0){
printf("%d\t%s\t%s\t%d\t%d\n", i+1, stu[i].id, stu[i].name, stu[i].building, stu[i].dorm);
flag = 1;
}
else if(type == 2 && strcmp(stu[i].name, keyword) == 0){
printf("%d\t%s\t%s\t%d\t%d\n", i+1, stu[i].id, stu[i].name, stu[i].building, stu[i].dorm);
flag = 1;
}
else if(type == 3 && stu[i].building == atoi(keyword)){
printf("%d\t%s\t%s\t%d\t%d\n", i+1, stu[i].id, stu[i].name, stu[i].building, stu[i].dorm);
flag = 1;
}
else if(type == 4 && stu[i].dorm == atoi(keyword)){
printf("%d\t%s\t%s\t%d\t%d\n", i+1, stu[i].id, stu[i].name, stu[i].building, stu[i].dorm);
flag = 1;
}
}
if(!flag){
printf("未找到匹配数据\n");
}
}
void modify(){ //数据修改
char keyword[20];
printf("请输入要修改的学生学号:\n");
scanf("%s", keyword);
int flag = 0;
for(int i=0; i<count; i++){
if(strcmp(stu[i].id, keyword) == 0){
printf("请输入修改后的学号、姓名、楼号、寝室号,以空格分隔:\n");
scanf("%s%s%d%d", stu[i].id, stu[i].name, &stu[i].building, &stu[i].dorm);
printf("修改成功!\n");
flag = 1;
break;
}
}
if(!flag){
printf("未找到匹配数据\n");
}
}
void statistics(){ //数据统计
if(count == 0){
printf("暂无数据\n");
return;
}
int total = 0;
for(int i=0; i<count; i++){
if(stu[i].building == 1){
total ++;
}
}
printf("一号楼有%d位学生入住\n", total);
}
void del(){ //数据删除
char keyword[20];
printf("请输入要删除的学生学号:\n");
scanf("%s", keyword);
int flag = 0;
for(int i=0; i<count; i++){
if(strcmp(stu[i].id, keyword) == 0){
for(int j=i; j<count-1; j++){
stu[j] = stu[j+1];
}
count --;
printf("删除成功!\n");
flag = 1;
break;
}
}
if(!flag){
printf("未找到匹配数据\n");
}
}
void save(){ //数据保存
FILE* fp;
fp = fopen("data.txt", "w");
for(int i=0; i<count; i++){
fprintf(fp, "%s %s %d %d\n", stu[i].id, stu[i].name, stu[i].building, stu[i].dorm);
}
fclose(fp);
printf("数据保存成功!\n");
}
void read(){ //数据读取
FILE* fp;
fp = fopen("data.txt", "r");
while(fscanf(fp, "%s%s%d%d", stu[count].id, stu[count].name, &stu[count].building, &stu[count].dorm) == 4){
count ++;
}
fclose(fp);
printf("数据读取成功!\n");
}
int main(){
int choice;
do{
menu();
printf("请输入选项(1-10):\n");
scanf("%d", &choice);
switch(choice){
case 1:
input();
break;
case 2:
output();
break;
case 3:
append();
break;
case 4:
search();
break;
case 5:
modify();
break;
case 6:
statistics();
break;
case 7:
del();
break;
case 8:
save();
break;
case 9:
read();
break;
case 10:
printf("感谢使用,再见!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}while(choice != 10);
return 0;
}
阅读全文