| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 190 人关注过本帖
标题:这是我编的一个程序,有一个错误,求高手麻烦解答一下,谢谢
只看楼主 加入收藏
胡哥
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-16
收藏
 问题点数:0 回复次数:0 
这是我编的一个程序,有一个错误,求高手麻烦解答一下,谢谢
/*
 * 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等。
搜索更多相关主题的帖子: search modify 
2011-06-16 11:48
快速回复:这是我编的一个程序,有一个错误,求高手麻烦解答一下,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.072910 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved