这个程序的错误在哪里? 我怎么都找不出
c语言吧
全部回复
仅看楼主
level 1
Allan_Lee 楼主
#include "stdio.h"                                    
#include "string.h"                                  
#include "stdlib.h"  
#include "process.h"                                                                                                                                                     /*exit()函数的头文件*/
#define PASSWORD 707374
#define MAX 100
#define SAVE_ADDRESS "d:\\data.txt"
struct student{
     char num[20];
     char name[10];
     char sex[5];
     char clas[10];
     char tel[15];
     char qq[15];
};
int main_menu();
int add_data(struct student *p,int n);
int delete_data(struct student *p,int n);
void alter_data(struct student *p,int n);
void sort_num(struct student *p,int n);
void sort_name(struct student *p,int n);
void swap(struct student *p1,struct student *p2)
int search_num(struct student *p,int n);
int search_name(struct student *p,int n);
int search_tel(struct student *p,int n);
int get_i_num(struct student *p,int n);
int get_i_name(struct student *p,int n);
int get_i_tel(struct student *p,int n);
void list(struct student *p,int n,int m);
void save_file(struct student *p,int n);
int main(void)
{
     struct student stu[MAX];
     FILE *fp;
     int n=0;
     char y_n[5];
     int choice;
     printf("是否载入已有数据文件? (yes/no):");
     scanf("%s",y_n);
     if((strcmp(y_n,"yes")==NULL)){
     if((fp=fopen("SAVE_ADDRESS","r"))==NULL){
         printf("打开文件时出现错误!\n");
         exit(0);

2010年06月16日 09点06分 1
level 1
Allan_Lee 楼主
             break;
         case 10:
             save(stu,n);
             break;
         }
     }
     return 0;
}                                  
int main_menu()
{
     int choice;
     printf("\n选项\n");
     printf("-----   编辑条目   -----\n");
     printf("1 - 新增条目\n");
     printf("2 - 删除条目\n");
     printf("3 - 修改条目\n");
     printf("----- 对条目排序 -----\n");
     printf("4 - 按学号排序\n");
     printf("5 - 按姓名排序\n");
     printf("-----   搜索条目   -----\n");
     printf("6 - 根据学号搜索\n");
     printf("7 - 根据姓名搜索\n");
     printf("8 - 根据电话搜索\n");
     printf("----------------------\n");
     printf("9 - 列出所有条目");
     printf("10 - 保存文件");
     printf("0 - 退出系统\n");
     printf("请输入你所需要的操作前面的序号\n");
     scanf("%d",&choice);
     return choice;
}
int add_data(struct student *p,int n)
{
     struct student *stu=p;
     int no_;
     for(no_=n;no_<MAX;no_++){
         printf("输入第%d个同学的信息\n",no_+1);
         printf("学号:\n");
         scanf("%s",(p+no_)->num);
         if (strcmp((p+no_)->num,"e")==0)
             break;
         printf("姓名:\n");
         scanf("%s",(p+no_)->name);
         printf("性别:\n");
         scanf("%s",(p+no_)->sex);
         printf("班级:\n");
         scanf("%s",(p+no_)->clas);
         printf("电话:\n");
         scanf("%s",(p+no_)->tel);

2010年06月16日 09点06分 3
level 1
Allan_Lee 楼主
         printf("QQ:\n");
         scanf("%s",(p+no_)->qq);
     }
     return no_;
}
int delete_data(struct student *p,int n)
{
     int i;
     int choice;
     printf("以什么形式搜索条目? 1 - 学号   2 - 姓名   3 - 电话\n");
     scanf("%d",choice);
     if(choice==1){
         i=search_num(p,n);
         if(i>=0)
             for(;i<n;i++)
                 p[i]=p[i+1];
         n=n-1;
         printf("\n该条目已删除\n");
     }
     else if(choice==2){
         i=search_name(p,n);
         if(i>=0)
             for(;i<n;i++)
                 p[i]=p[i+1];
         n=n-1;
         printf("\n该条目已删除\n");
     }
     else{
         i=search_tel(p,n);
         if(i>=0)
             for(;i<n;i++)
                 p[i]=p[i+1];
         n=n-1;
         printf("\n该条目已删除\n");
     }
    
     return n;
}
void alter_data(struct student *p,int n)
{
     int i;
     int choice;
     printf("以什么形式搜索条目? 1 - 学号   2 - 姓名   3 - 电话\n");
     scanf("%d",choice);
     if(choice==1){
         i=search_num(p,n);
         if(i>=0)
             printf("请输入新的信息:\n");
             printf("学号:\n");
             scanf("%s",(p+i)->num);
             printf("姓名:\n");

2010年06月16日 09点06分 4
level 1
Allan_Lee 楼主
             scanf("%s",(p+i)->name);
             printf("性别:\n");
             scanf("%s",(p+i)->sex);
             printf("班级:\n");
             scanf("%s",(p+i)->clas);
             printf("电话:\n");
             scanf("%s",(p+i)->tel);
             printf("QQ:\n");
             scanf("%s",(p+i)->qq);
             printf("\n信息修改成功!\n");
     }
     else if(choice==2){
         i=search_name(p,n);
         if(i>=0)
             printf("请输入新的信息:\n");
             printf("学号:\n");
             scanf("%s",(p+i)->num);
             printf("姓名:\n");
             scanf("%s",(p+i)->name);
             printf("性别:\n");
             scanf("%s",(p+i)->sex);
             printf("班级:\n");
             scanf("%s",(p+i)->clas);
             printf("电话:\n");
             scanf("%s",(p+i)->tel);
             printf("QQ:\n");
             scanf("%s",(p+i)->qq);
             printf("\n信息修改成功!\n");
     }
     else{
         i=search_tel(p,n);
         if(i>=0)
             printf("请输入新的信息:\n");
             printf("学号:\n");
             scanf("%s",(p+i)->num);

2010年06月16日 09点06分 5
level 1
Allan_Lee 楼主
             printf("姓名:\n");
             scanf("%s",(p+i)->name);
             printf("性别:\n");
             scanf("%s",(p+i)->sex);
             printf("班级:\n");
             scanf("%s",(p+i)->clas);
             printf("电话:\n");
             scanf("%s",(p+i)->tel);
             printf("QQ:\n");
             scanf("%s",(p+i)->qq);
             printf("\n信息修改成功!\n");
     }
}
void sort_num(struct student *p,int n)
{
     int i,j;
     int choice;
     printf("以什么形式排序条目? 1 - 升序   2 - 降序\n");
     scanf("%d",choice);
     if(choice==1){
         for(i=1;i<n;i++)
             for(j=0;j<n-1;j++)
                 if(strcmp((p+j)->num,(p+j+1)->num)>0)
                     swap((p+j),(p+j+1));
     }
     else{
         for(i=1;i<n;i++)
             for(j=0;j<n-1;j++)
                 if(strcmp((p+j)->num,(p+j+1)->num)<0)
                     swap((p+j),(p+j+1));
     }
     printf("排序完成!");
}
void sort_name(struct student *p,int n)
{
     int i,j;
     int choice;
     printf("以什么形式排序条目? 1 - 升序   2 - 降序\n");
     scanf("%d",choice);
     if(choice==1){
         for(i=1;i<n;i++)
             for(j=0;j<n-1;j++)
                 if(strcmp((p+j)->name,(p+j+1)->name)>0)

2010年06月16日 09点06分 6
level 1
Allan_Lee 楼主
                     swap((p+j),(p+j+1));
     }
     else{
         for(i=1;i<n;i++)
             for(j=0;j<n-1;j++)
                 if(strcmp((p+j)->num,(p+j+1)->num)<0)
                     swap((p+j),(p+j+1));
     }
     printf("排序完成!");
}
void swap(struct student *p1,struct student *p2)
{
     struct student temp;
     temp=*p1;
     *p1=*p2;
     *p2=temp;
}
int search_num(struct student *p,int n)
{
     int i;
     char num[20];
     printf("请输入要查找的学号:\n");
     scanf("%s",num);
     i=get_i_num(p,n,num);
     if(i==-1)
         printf("抱歉,没有相关条目");
     else
         list(p,i,i);
     return i;
}
int search_name(struct student *p,int n)
{
     int i;
     char name[10];
     printf("请输入要查找的姓名:\n");
     scanf("%s",name);
     i=get_i_name(p,n,name);
     if(i==-1)
         printf("抱歉,没有相关条目");
     else
         list(p,i,i);
     return i;
}
int search_tel(struct student *p,int n)
{
     int i;
     char tel[15];
     printf("请输入要查找的电话:\n");
     scanf("%s",tel);
     i=get_i_tel(p,n,tel);
     if(i==-1)
         printf("抱歉,没有相关条目");
     else
         list(p,i,i);
     return i;
}
int get_i_num(struct student *p,int n,char *num)
{
     int i;
     for(i=0;i<n;i++){
     if(strcmp((p+i)->num,num)==0)
         return i;
     }
     return -1;
}
int get_i_name(struct student *p,int n,char *name)
{
     int i;
     for(i=0;i<n;i++){

2010年06月16日 09点06分 7
level 1
Allan_Lee 楼主
谁有空可以帮我看看的T^T
2010年06月16日 12点06分 9
level 0
看看
2010年06月16日 12点06分 10
level 0
int get_i_num(struct student *p,int n);
int get_i_name(struct student *p,int n);
int get_i_tel(struct student *p,int n);
改成
int get_i_num(struct student *p,int n,char *num);
int get_i_name(struct student *p,int n,char *name);
int get_i_tel(struct student *p,int n,char *tel);
函数参数定义不一致

2010年06月16日 13点06分 11
level 2
void swap(struct student *p1,struct student *p2)
改成
void swap(struct student *p1,struct student *p2);
缺少;符号
case 10:
              save(stu,n);
              break;
改成
case 10:
              save_file(stu,n);
              break;
定义中无save函数
大功告成
2010年06月16日 13点06分 12
1