| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 340 人关注过本帖
标题:求大神帮帮忙 很急!!!!!!!怎么改啊!!!!!!
取消只看楼主 加入收藏
wx706668321
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-1-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
求大神帮帮忙 很急!!!!!!!怎么改啊!!!!!!
#include<stdio.h>  
#include<stdlib.h>  //标准库函数
#include<string.h>  //字符串函数
#include<dos.h> //为了调用atof()等函数
#define M 50   //定义常数表示记录数
int flag=0;
char numstr[50];
char temp;
typedef struct   //定义数据结构
{
    char Name[30];
    char Num[30];
    char Class[10];
    char Tel[50];
    char Score[20];
    char temp;
}ADDRESS;

/*@@@@@@@@@@@@@@以下是函数原型@@@@@@@@@@@@@@*/

int enter (ADDRESS t[]);  //输入数据
void list (ADDRESS t[],int n);  //显示全部记录
int add (ADDRESS t[],int n);  //插入数据
int delete (ADDRESS t[],int n); //删除数据
int modify (ADDRESS t[],int n);  //修改数据
void display (ADDRESS t[]);  //按学号查询数据
void sort (ADDRESS t[],int n);  //按姓名排序
void save (ADDRESS t[],int n);  //将数据保存文件
int find (ADDRESS t[],int n,char *s);  //查找函数
void print(ADDRESS temp);  //显示单条记录
int menu_select ();  //主菜单函数

/*》》》》》》》》》》》》........主函数开始........《《《《《《《《《《《《*/

main()
{
    ADDRESS adr[M];  //定义结构体数组
    int length;
    system("cls");        //清屏
    for(; ;)  //无限循环
    {
        system("color  5e");
        switch(menu_select())  //调用主菜单函数,返回值整数作开关语句的条件
        {
        case 0:length=enter(adr);break;  //输入记录
        case 1:list(adr,length);break;  //显示全部记录
        case 2:length=add(adr,length);  break;  //插入记录
        case 3:length=delete(adr,length);break;  //删除记录
        case 4:length=modify(adr,length);break;  //修改记录
        case 5:display(adr);break;  //按学号显示记录
        case 6:sort(adr,length);break;  //按姓名排序
        case 7:save(adr,length);break;  //保存文件
        case 8:exit(0);  //如返回值为8则程序结束
        }
   
    }



}

/*菜单函数,函数返回值为整数,代表所选的菜单项*/
menu_select(){

    char s[80];
    int c;
    printf("press any key to enter the menu ......\n");  //提示按任意键继续
    getchar();  //读任意字符
    system("cls"); //清屏  
    printf("\n");
    printf("====================欢迎使用学生信息管理系统============================\n");
    printf("****************************【MENU】***************************\n\n");
    printf("               【0】enter record\n");
    printf("               【1】list the file\n");
    printf("               【2】add record\n");
    printf("               【3】delete a record\n");
    printf("               【4】modify a record\n");
    printf("               【5】display record on order\n");
    printf("               【6】sort to make new file\n");
    printf("               【7】save the file\n");
    printf("               【8】quit\n");
    printf("***********************************************************\n");

    do{
        printf("\n           Enter your choice(0~8):");  //提示输入选项
        scanf("%s",s); //输入选择项
        c=atoi(s);  //将输入的字符串转化为整形数
}
    while(c<0||c>8);  //选项不在0~8之间,请重新输入
    return c;  //返回选择项,主程序根据該数调用相应的函数

}

//*****输入记录,形参为结构体数组,函数值返回类型为整形 表示记录长度

int enter(ADDRESS t[]){

    int i,j;

    system("cls");  //清屏
    printf("\n  Please input num \n");  //提示输入信息
    scanf("%d",&j);  //输入记录数
    printf("\n  Please input record\n");  //提示输入记录
    printf("Name      Num      Class    Tel      Score \n ");
    printf("-------------------------------------------------------\n");
    for(i=0;i<j;i++){
   
        scanf("%s%s%s%s%s",t[i].Name,t[i].Num,t[i].Class,t[i].Tel,t[i].Score);
        printf("--------------------------------------------------\n");
   
    }
   
return j;  //返回记录条数

}

//*****显示记录,参数为记录数组和记录条数

void list(ADDRESS t[],int n){
    int i;
    system("cls");  //清屏
    printf("**************************ADDRESS*******************************\n");
    printf("Name      Num      Class    Tel      Score \n ");
    printf("----------------------------------------------------------------\n");
    for(i=0;i<n;i++)
    printf("%-30s%-30s%-50s%-10s%-20s",t[i].Name,t[i].Num,t[i].Class,t[i].Tel,t[i].Score);
    if((i+1)%15==0)  //判断输出是否达到15条记录
    {
        printf("Please press any key to continue...\n");
        getchar();  //按任意键继续

    }
    printf("*********************The End************************\n");

}

//*****增加数据,参数为记录数组和记录条数


int add(ADDRESS t[],int n){
    ADDRESS temp; //新插入记录信息
    int i,j;
    char s[30];  //确定将该信息增加在哪个位置
   
    printf("Please input record\n");  //提示输入数据
    printf("*************************************************************\n");
    printf("Name      Num      Class    Tel      Score \n");
    printf("--------------------------------------------------------------\n");
    scanf("%s%s%s%s%s",t[i].Name,t[i].Num,t[i].Class,t[i].Tel,t[i].Score);  //输入插入信息
    printf("Please input locate name \n");
    scanf("%s",s);  //输入插入位置的姓名或学号
    i=find(t,n,s);  //调用find函数,确定要插入的位置
    for(j=n-1;j>=i;j--)  //从最后一个节点开始向后移动一条
    {
        strcpy(t[j+1].Name,t[j].Name);  //将当前记录的姓名拷贝到后一条
        strcpy(t[j+1].Num,t[j].Num);  //将当前记录的学号拷贝到后一条
        strcpy(t[j+1].Class,t[j].Class);  //将当前记录的班级拷贝到后一条
        strcpy(t[j+1].Tel,t[j].Tel);  //将当前记录的电话号拷贝到后一条
        strcpy(t[j+1].Num,t[j].Num);  ////将当前记录的分数拷贝到后一条
    }

strcpy(t[i].Name,temp.Name);  //将新插入记录的姓名拷贝到第i个位置
strcpy(t[i].Num,temp.Num);  //将新插入记录的学号拷贝到第i个位置
strcpy(t[i].Class,temp.Class);  //将新插入记录的班级拷贝到 第i个位置
strcpy(t[i].Tel,temp.Tel);  //将新插入记录的电话拷贝到第i个位置
strcpy(t[i].Score,temp.Score);  //将新插入记录的分数拷贝到第i个位置
n++;  //记录数加1
return n;  //返回记录数
}

//*****删除数据,参数为记录数组和记录条数

int delete(ADDRESS t[],int n){
    char s[20];  //要删除的学生姓名
    int ch=0;
    int i,j;
    system("cls");
   
    printf("Please input deleted name\n");  //提示输入信息
    scanf("%s",s);
    i=find(t,n,s);  //调用find函数,确定要删除的位置
    if(i>n-1)  //如果i>n-1超过了数组的长度
        printf("Not find data to delete!\n");  //显示没有要删除的文件
    else{
         
          printf("Are you sure delete it (1/0)\n");  //确认是否删除
          scanf("%d",&ch);
          if(ch==1)  //确认删除  整数为1
          {
              
              for(j=i+1;j<n;j++)  //删除该纪录后,实际后续记录前移
              {
              
                  strcpy(t[j-1].Name,t[j].Name);  //将后一条记录的姓名拷贝到前一条
                  strcpy(t[j-1].Num,t[j].Num);  //将后一条记录的学号拷贝到前一条
                  strcpy(t[j-1].Class,t[j].Class);  //将后一条记录的班级拷贝到前一条
                  strcpy(t[j-1].Tel,t[j].Tel);  //将后一条记录的电话拷贝到前一条
                  strcpy(t[j-1].Score,t[j].Score);  //将后一条记录的电话拷贝到前一条
                  n--;  //记录数减1
              }
          }
    return n;  //返回记录数
    }

//*****修改数据,参数为记录数组和记录条数
    int modify (ADDRESS t[],int n){
        char  t[];
        int j;
        int flagfind = 0;  //定义标志数
        printf("\n请输入学生的学号:\n");
        gets(numstr);
        ADDRESS = atof(numstr);
        for(j=0;j<=n;j++){
        
            if(t[j].Num==Num)
            {
                printf("\t学生学号:%d10.0f\n",t[i].Num);
                printf("\t学生班级:%d\n",t[i].Class);
                printf("\t请输入学生班级:%d\n");
                gets(numstr);
                t[i].Class=atoi(numstr);
                printf("\t学生分数:%10.2f\n",t[i].Score);
                printf("\t请输入学生分数:%10.2f\n");
                gets(numstr);
                t[i].Class=atof(numstr);
                printf("\t学生电话:%s\n",t[i].Tel);
                printf("\t请输入学生电话:%s\n");
                gets(numstr);
                flagfind=1;   
            }
            else{
        

    flagfind = 0;
   
    }

        }
if(flagfind!=0)printf("\n没有此记录!\n");
return 0;
        }


//*****按学号显示记录函数

void display(ADDRESS t[])
{
    int id,n;
    FILE *fp;  //指向文件的指针
    if((fp=fopen("record.txt","rb"))==NULL)  //打开文件
    {
        printf("Can not open file!\n");
        exit(1);
    }
printf("Enter order number:\n");  //显示输入信息
scanf("%d",&id);  //输入序号数
fscanf(fp,"%s",&n)  //从文件中读入记录数
if(id>=0 && id<n)  //判断序号数是否在记录范围内
{
    fseek(fp,(id-1)*sizeof(ADDRESS),1);  //移动文件指针到该该记录位置
    printf(t[id]);  //调用输出函数显示该记录
    printf("\r\n");
}
else
printf("No %d number record!!!\n",id);  //如果序号不合理显示信息
fclose(fp);  //关闭文件

}

//*****按姓名排序,参数为结构体数组和记录数

void sort(ADDRESS t[],int n)
{
   
    int i,j,k,flag;
    char temp;  //定义临时变量做交换数据用
    for(i=0;i<n-1;i++){
    k=i;
        
        for(j=i+1;j<n;j++)
            if((strcmp(t[k].Name ,t[j].Name))>0)k=j;  //比较大小
            if(k!=j)
            {
               
                strcpy(temp.Name,t[j].Name);
                strcpy(temp.Num,t[j].Num);
                strcpy(temp.Class,t[j].Class);
                strcpy(temp.Tel,t[j].Tel);
                strcpy(temp.Score,t[j].Score);
                strcpy(t[j].Name,t[j+1].Name);
                strcpy(t[j].Num,t[j+1].Num);
                strcpy(t[j].Class,t[j+1].Class);
                strcpy(t[j].Tel,t[j+1].Tel);
                strcpy(t[j].Score,t[j+1].Score);
                strcpy(t[j+1].Name,temp.Name);
                strcpy(t[j+1].Num,temp.Num);
                strcpy(t[j+1].Class,temp.Class);
                strcpy(t[j+1].Tel,temp.Tel);
                strcpy[(t[j+1].Score,temp.Score);
            }
            
    }

printf("sort success!!\n");  //显示按姓名排序排序成功

}

//***** 保存文件,参数为结构体数组和记录数

void save(ADDRESS t[],int n){
int i;

 FILE *fp=fopen("record.txt","w");
 if(!fp){

    printf("文件打开失败\n");
    exit(1);
}
printf("\n Saving file\n");  //提示数据保存信息
fprintf(fp,"%d",n);  //将记录数写入文件
fprintf(fp,"\r\n");  //将换行文件写入文件
for(i=0;i<n;i++){

    fprintf(fp,"%-30s%-30s%-50s%-10s%-20s",t[i].Name,t[i].Num,t[i].Class,t[i].Tel,t[i].Score);  //格式写入记录
fprintf(fp,"\r\n");  //将换行文件写入文件
}
fclose(fp);  //关闭文件
printf("******************SAVE SUCCESS********************\n");  //显示文件保存成功

}
搜索更多相关主题的帖子: include 字符串 
2015-01-20 11:08
wx706668321
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-1-20
收藏
得分:0 
回复 2楼 wp231957
按我们学院给的模板编的学生信息管理系统 就是错误好多 不知道从何查起啊。
2015-01-20 11:22
wx706668321
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-1-20
收藏
得分:0 
回复 4楼 wp231957
vc6.0
2015-01-20 11:25
wx706668321
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-1-20
收藏
得分:0 
回复 6楼 wp231957
哦。我们刚学了C 学的不深
那这个程序有法改吗?
2015-01-20 11:34
快速回复:求大神帮帮忙 很急!!!!!!!怎么改啊!!!!!!
数据加载中...
 
   



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

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