实现对学生信息的增加、删除、查找、修改、列出所有学生信息(1.0)
2.1 项目名称
学生信息管理系统
2.2 项目描述
实现对学生信息的增加、删除、查找、修改(自行处理)、列出所有学生信息
2.3 项目分析与设计
2.3.1 前奏
学生信息:学号、姓名、性别、年龄、 C语言成绩
结构体:
不同数据类型成员的集合
2.3.2 功能模块
(1)增加学生信息
void addMessage();
(2)删除学生信息
void delMessage();
(3)查找学生信息
void findMessage();
(4)列出学生信息
void listMessage();
2.4 项目整体架构
功能:
字符界面
详情请看结构图
2.5 功能模块的详细设计
(1)增加学生信息
void addMessage();
-> scanf读取用户的输入
存储到结构体数组中
(2)删除学生信息
void delMessage();
-> 查找指定的学生信息
(1)数组中后面的元素向前移动
(2)结构体信息 学号 = 0;
(3)查找学生信息
void findMessage();
-> 使用循环遍历结构体数组
(4)列出学生信息
void listMessage();
-> 使用循环输出
2.6 采用多文件去编写
student.h
-》定义学生信息结构体
-》声明功能函数
student.c
-》实现上面的功能函数
main.c
-》主函数 字符界面
使用Makefile进行项目的编译链接
show.h
1 #ifndef _SHOW_H 2 #define _SHOW_H 3 4 void show();//显示菜单 5 int showMenu(); 6 7 #endif
show.c
1 #include "show.h" 2 #include "stu_mess.h" 3 #include <stdio.h> 4 #include "file.h" 5 6 void show(){ 7 load(); 8 while(1){ 9 switch(showMenu()){ 10 case 1 : addMessage();break; 11 case 2 : delMessage();break; 12 case 3 : findMessage();break; 13 case 4 : listMessage();break; 14 case 0 : save();puts("欢迎再次使用!");return; 15 } 16 } 17 } 18 19 int showMenu(){ 20 puts("\n\n****欢迎进入学生信息管理系统!***"); 21 printf("[1] 增加信息\t"); 22 printf("[2] 删除信息\n"); 23 printf("[3] 查找信息\t"); 24 printf("[4] 查看信息\n"); 25 puts("[0] 退出"); 26 puts("请选择:"); 27 int in; 28 scanf("%d", &in); 29 while(!(in==1||in==2||in==3||in==4||in==0)){ 30 printf("输入有误,请重新输入:"); 31 scanf("%*[^\n]"); 32 scanf("%*c"); 33 scanf("%d", &in); 34 } 35 return in; 36 }
student.h
1 #ifndef STU_MESS_H 2 #define STU_MESS_H 3 4 struct student{ 5 int num; //学号 6 char name[10]; //姓名 7 char sex[5]; //性别 8 int age; //年龄 9 float sco; //成绩 10 }stu[10]; 11 12 int size;//记录学生个数 13 14 void addMessage();//增加 15 void delMessage(); 16 void findMessage(); 17 void listMessage(); 18 19 #endif
student.c
1 #include "stu_mess.h" 2 #include "file.h" 3 #include <stdio.h> 4 #include <string.h> 5 6 extern int size; 7 8 void addMessage(){ 9 puts("请输入学生的学号、姓名、性别、年龄、C语言成绩:"); 10 scanf("%d%s%s%d%f",&stu[size].num, &stu[size].name, 11 &stu[size].sex, &stu[size].age, &stu[size].sco); 12 size++; 13 puts("增加学生信息成功!"); 14 } 15 void delMessage(){ 16 puts("请输入你要删除的学生学号:"); 17 int dn,i,cnt=size;//dn 记录输入学生的学号 18 //i 循环变量 19 //cnt 记录原来学生的个数,判断删除失败的情况 20 scanf("%d", &dn); 21 for(i=0; i<size; i++){ 22 if(stu[i].num==dn){ 23 for(;i<size-1;i++){ 24 stu[i].num = stu[i+1].num; 25 strcpy(stu[i].name,stu[i+1].name); 26 strcpy(stu[i].sex,stu[i+1].sex); 27 stu[i].age= stu[i+1].age; 28 stu[i].sco= stu[i+1].sco; 29 } 30 size--; 31 puts("删除成功!"); 32 break; 33 } 34 } 35 if(cnt==size) 36 puts("删除失败,没有该学生!"); 37 } 38 void findMessage(){ 39 puts("请输入你要查找的学生学号:"); 40 int fn,i; 41 scanf("%d", &fn); 42 for(i=0; i<size; i++){ 43 if(stu[i].num==fn){ 44 printf("学号\t姓名\t性别\t年龄\t成绩\n"); 45 printf("%d\t%s\t%s\t%d\t%f\n",stu[i].num, stu[i].name, 46 stu[i].sex, stu[i].age, stu[i].sco); 47 break; 48 } 49 } 50 if(i==size) 51 puts("没有您要查找的学生信息!"); 52 } 53 void listMessage(){ 54 printf("学号\t姓名\t性别\t年龄\t成绩\n"); 55 int i; 56 for(i=0; i<size; i++){ 57 printf("%d\t%s\t%s\t%d\t%.3f\n",stu[i].num, stu[i].name, 58 stu[i].sex, stu[i].age, stu[i].sco); 59 } 60 }
file.h
1 #ifndef _FILE_H 2 #define _FILE_H 3 4 void load(); 5 void save(); 6 7 #endif
file.c
1 #include "file.h" 2 #include <stdio.h> 3 #include "stu_mess.h" 4 5 void load(){ 6 FILE* fd = fopen("stu.dat", "r"); 7 if(!fd){ 8 perror("open a file error"); 9 return; 10 } 11 while(fread(&stu[size],sizeof(struct student),1,fd)){ 12 size++; 13 } 14 close(fd); 15 } 16 void save(){ 17 FILE* fd = fopen("stu.dat", "w"); 18 if(!fd){ 19 perror("open a file error"); 20 return; 21 } 22 int i; 23 for(i=0; i<size; i++){ 24 fwrite(&stu[i],sizeof(struct student),1,fd); 25 } 26 close(fd); 27 }
浙公网安备 33010602011771号