实现对学生信息的增加、删除、查找、修改、列出所有学生信息(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 }

 

 

posted @ 2013-11-12 19:13  intj_zhouy  阅读(2401)  评论(0)    收藏  举报