这是我编的一个程序,有一个错误,求高手麻烦解答一下,谢谢
/** stumng.h
*/
#ifndef STUMNG_H
#define STUMNG_H
#define ADD 1 /*add student's information */
#define MODIFY 2 /*modify student's information*/
#define SEARCH 3 /*search student's information*/
#define BROWSE 4
#define DELETE 5
#define IMPORT 6
#define EXPORT 7
#define QUIT 8
void on_add();
void on_modify();
void on_search();
void on_browse();
void on_delete();
void on_import();
void on_export();
void on_quit();
#define MAX_STUDENT_NUM 20
struct student {
int sno;
char name[10];
unsigned short age;
char sex[5];
char birthday[20];
char address[300];
char tel[5];
char email[30];
} stutab[MAX_STUDENT_NUM];
struct menu {
int mno;
char name[50];
void (*handle)();
} menutab[] = {
{ADD, "增加学生信息", on_add},
{MODIFY, "修改学生信息", on_modify},
{SEARCH, "查询学生信息", on_search},
{BROWSE, "浏览学生信息", on_browse},
{DELETE, "删除学生信息", on_delete},
{IMPORT, "导入学生信息", on_import},
{EXPORT, "导出学生信息", on_export},
{QUIT, "退出系统", on_quit},
};
#define MENU_NUM (sizeof menutab / sizeof menutab[0])
#endif
/*
*file: stumng.c
*/
#include <stdio.h>
#include <string.h>
#include "stumng.h"
int next_index = 0;
void on_add()
{
if (next_index == MAX_STUDENT_NUM) {
printf("存储空间已满,最大只能存%d条记录\n", MAX_STUDENT_NUM);
} else {
printf("学号(如:1):");
scanf("%d", &stutab[next_index].sno);
printf("姓名(如:张三):");
scanf("%s", stutab[next_index].name);
printf("年龄(如:20):");
scanf("%d", &stutab[next_index].age);
printf("性别(男、女,如:男):");
scanf("%s", stutab[next_index].sex);
printf("出生年月(如:1990-01-12):");
scanf("%s", stutab[next_index].birthday);
printf("地址(如:杭州市xx区):");
scanf("%s", stutab[next_index].address);
printf("电话(如:13100000000):");
scanf("%s", stutab[next_index].tel);
printf("E-mail(如:xxx@):");
scanf("%s", stutab[next_index].email);
next_index++;
printf("成功添加1条记录\n");
}
}
void on_modify()
{
int sno, index, count = 0;
printf("输入要修改学生的学号:");
scanf("%d", &sno);
if ((index = exists_student(sno)) != -1) {
printf("姓名(%s)修改为:", stutab[index].name);
scanf("%s", stutab[index].name);
printf("年龄(%d)修改为:", stutab[index].age);
scanf("%d", &stutab[index].age);
printf("性别(%s)修改为:", stutab[index].sex);
scanf("%s", stutab[index].sex);
printf("出生年月(%s)修改为:", stutab[index].birthday);
scanf("%s", stutab[index].birthday);
printf("地址(%s)修改为:", stutab[index].address);
scanf("%s", stutab[index].address);
printf("电话(%s)修改为:", stutab[index].tel);
scanf("%s", stutab[index].tel);
printf("E-mail(%s)修改为:", stutab[index].email);
scanf("%s", stutab[index].email);
count++;
} else {
printf("没有要修改学生的信息记录\n");
}
printf("%d条记录已被修改!\n", count);
}
void on_search()
{
int condition = 0;
int sno;
char name[10];
int index;
int count = 0;
printf("请选择查询条件(1学号, 2姓名):");
scanf("%d", &condition);
if (condition == 1) {
printf("输入学号:");
scanf("%d", &sno);
printf("学号\t姓名\t年龄\t性别\t生日\t地址\t\t电话\tEmail\n");
if ((index = exists_student(sno)) != -1) {
printf("%d\t%s\t%d\t%s\t%s\t%s\t\t%s\t%s\n", stutab[index].sno,
stutab[index].name, stutab[index].age, stutab[index].sex,
stutab[index].birthday, stutab[index].address, stutab[index].tel,
stutab[index].email);
count++;
}
} else if (condition == 2) {
printf("输入姓名:");
scanf("%s", name);
printf("学号\t姓名\t年龄\t性别\t生日\t地址\t\t电话\tEmail\n");
for (index = 0; index < next_index; index++) {
if (strncmp(name, stutab[index].name, strlen(name)) == 0) {
printf("%d\t%s\t%d\t%s\t%s\t%s\t\t%s\t%s\n", stutab[index].sno,
stutab[index].name, stutab[index].age, stutab[index].sex,
stutab[index].birthday, stutab[index].address, stutab[index].tel,
stutab[index].email);
count++;
}
}
} else {
printf("ERROR:未正确选择查询条件!\n");
}
printf("共有%d条记录\n", count);
}
void on_browse()
{
int i = 0;
printf("学号\t姓名\t年龄\t性别\t生日\t地址\t\t电话\tEmail\n");
for (; i < next_index; i++) {
printf("%d\t%s\t%d\t%s\t%s\t%s\t\t%s\t%s\n", stutab[i].sno,
stutab[i].name, stutab[i].age, stutab[i].sex,
stutab[i].birthday, stutab[i].address, stutab[i].tel,
stutab[i].email);
}
printf("共有%d条记录\n", next_index);
}
void on_delete()
{
void copy_student(int, int);
int sno = -1; int index ;
int confirm = 0;
int i;
printf("输入要删除学生的学号:");
scanf("%d", &sno);
index = exists_student(sno);
if (index == -1) {
printf("未删除任何信息记录!\n");
} else {
for (i = index; i < next_index; i++) {
copy_student(i, i + 1);
}
next_index--;
printf("1条记录被删除!\n");
}
}
void on_import()
{
FILE *fp;
char filename[30];
int count = 0;
char line[1000];
printf("导入的文件[如:c:/in.txt]:");
scanf("%s", filename);
fp = fopen(filename, "r");
if (fp == NULL) {
printf("文件打开失败!\n");
} else {
if (next_index == MAX_STUDENT_NUM) {
printf("存储空间已满,最大只能存%d条记录\n", MAX_STUDENT_NUM);
} else {
while(fgets(line, 1000, fp) != NULL) {
sscanf(line, "%d\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", &stutab[next_index].sno, stutab[next_index].name,
&stutab[next_index].age, stutab[next_index].sex, stutab[next_index].birthday,
stutab[next_index].address, stutab[next_index].tel, stutab[next_index].email);
next_index++;
count++;
}
}
fclose(fp);
}
printf("成功导入%d条记录!", count);
}
void on_export()
{
char filename[30];
FILE *fp;
int count = 0;
int i;
printf("导出到文件[如:c:/out.txt]:");
scanf("%s", filename);
fp = fopen(filename, "w");
if (fp == NULL) {
printf("ERROR:信息导出失败!");
} else {
for (i = 0; i < next_index; i++) {
fprintf(fp, "%d\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", stutab[i].sno,
stutab[i].name, stutab[i].age, stutab[i].sex,
stutab[i].birthday, stutab[i].address, stutab[i].tel,
stutab[i].email);
count++;
}
fclose(fp);
}
printf("成功导出%d条记录!\n", count);
}
void on_quit()
{
printf("Thank you! Bye!\n");
}
void show_menu()
{
int i = 0;
printf("\n****************************************\n");
for (; i < MENU_NUM; i++) {
printf("\t%d.%s\n", menutab[i].mno, menutab[i].name);
}
printf("\n****************************************\n");
}
int select_menu()
{
int mno = 0;
show_menu();
printf("请选择菜单(1~8):");
scanf("%d", &mno);
return mno;
}
int exists_menu(int mno)
{
int i = 0;
for (; i<MENU_NUM; i++) {
if (menutab[i].mno == mno)
return i;
}
return -1;
}
int exists_student(int sno)
{
int i = 0;
for (; i < next_index; i++) {
if (stutab[i].sno == sno)
return i;
}
return -1;
}
void copy_student(int dst, int src)
{
stutab[dst].sno = stutab[src].sno;
strcpy(stutab[dst].name, stutab[src].name);
stutab[dst].age = stutab[src].age;
strcpy(stutab[dst].sex, stutab[src].sex);
strcpy(stutab[dst].birthday, stutab[src].birthday);
strcpy(stutab[dst].address, stutab[src].address);
strcpy(stutab[dst].tel, stutab[src].tel);
strcpy(stutab[dst].email, stutab[src].email);
}
void run()
{
/*show_menu();*/
int mno;
int index;
while((mno = select_menu()) != QUIT) {
if ((index = exists_menu(mno)) != -1) {
(*menutab[index].handle)();
}
}
on_quit();
}
int main()
{
run();
}
学生信息管理系统设计
实现以下功能:
1) 系统以菜单方式工作;
2) 学生信息录入功能(学生信息用文件保存);
3) 学生信息浏览功能;
4) 查询、排序功能(至少两种查询依据和两种排序依据);
5) 学生信息删除、修改功能。
备注:学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。