| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 304 人关注过本帖
标题:信息管理系统的一部分的两个问题:输入信息到地址系统报错;该删的没删,不该删 ...
只看楼主 加入收藏
Snail_蜗牛
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-8-10
收藏
 问题点数:0 回复次数:1 
信息管理系统的一部分的两个问题:输入信息到地址系统报错;该删的没删,不该删的删了...
#include <stdio.h>

int menu();
int insertNewStu(int row);
int getStuRowByNo(char no[]);
int deleteByNo();

void init();
void listStu();
void analyse(char c[]);
/****************************
   students保存学员信息,
stu_num表示已经存在的学员个数
*****************************/
char students[50][200];
int stu_num=2;
void main()
{
    int opt;
    int result=1;
    init();

    while(result)//每一次执行完后返回主菜单
    {
        opt=menu();
        if(result==0)
        {
            break;
        }
        switch(opt)
        {
        case 1:
            //printf("\t执行操作:输入学员资料\n");
            result=insertNewStu(stu_num);
            stu_num++;
            break;
        case 2:
            //printf("\t执行操作:删除学员资料\n");
            result=deleteByNo();
            stu_num--;
            break;
        case 3:
            printf("\t执行操作:查找学员资料\n");
            break;
        case 4:
            printf("\t执行操作:修改学员资料\n");
            break;
        case 5:
            //printf("\t执行操作:输出学员信息数据\n");
            listStu();
             break;
        case 0:
            printf("\t谢谢使用.\n");
            result=0;
            break;
        default:
            printf("\t您输入的选项有误.\n");
        }
    }
}

int menu()
{
    int option;
    printf("\n\t---------------------------------");
    printf("\n\t学员信息管理系统");
    printf("\n\t---------------------------------\n");
    printf("\t1.输入学员资料\n");
    printf("\t2.删除学员资料\n");
    printf("\t3.查找学员资料\n");
    printf("\t4.修改学员资料\n");
    printf("\t5.输出学员资料\n");
    printf("\t0.退出\n");

    printf("\t请选择您要进行的操作:");
    scanf("%d",&option);
    return option;
}
/***********************
   初始化2名学员信息
************************/
void init()
{
    strcpy(students[0],"2010-$-张学友-$-男-$-香港-$-13601234567-$-98-$-89-$-");
    strcpy(students[1],"2011-$-王菲-$-女-$-北京-$-15887654321-$-99-$-100-$-");
}
/**********************
     输出学员所有信息
**********************/
void listStu()
{
    /*printf("%s\n",students[0]);
    printf("%s\n",students[1]);
    printf("%s\n",students[2]);*/
    int i;
    char temp[200]=" ";
    printf("\n\t**************现存的学员信息*************\n");
    printf("学号\t");
    printf("姓名\t");
    printf("性别\t");
    printf("地址\t");
    printf("手机\t\t");
    printf("Java\t");
    printf(".Net\t\n");
    //针对每一行信息进行处理
    for(i=0;i<stu_num;i++)
    {
        strcpy(temp,students[i]);
        while(strlen(temp)!=0)
        {
            analyse(temp);
        }
        printf("\n");
    }

}

/*********************
    输入学员信息
*********************/
int insertNewStu(int row)
{
    char stu_temp[1][200];//暂存该学员信息
    char n_temp[20];
    char a_temp[30];
    char c_temp[20];
    int i_temp;
    int flag=0;//用来标示前一项信息是否输入完成
    int i;

    //输入学号
    while(flag==0)
    {
        printf("\n\t请输入学号:");
        scanf("%d",&i_temp);
        if(i_temp<1000 || i_temp>9999)
        {
            printf("\t学号非法,必须4位数字.");
            continue;
        }
        else
        {
            sprintf(c_temp,"%d",i_temp);
            strcpy(stu_temp[0],c_temp);
            strcat(stu_temp[0],"-$-");
            flag=1;
        }   
    }
    //输入姓名
    while(flag==1)
    {
        printf("\n\t请输入姓名:");
        scanf("%s",&n_temp);
        if(strlen(n_temp)>20)
        {
            printf("\t姓名过长.");
            continue;
        }
        else
        {
            strcat(stu_temp[0],n_temp);
            strcat(stu_temp[0],"-$-");
            flag=2;
        }
    }
    //输入性别
    while(flag==2)
    {
        printf("\n\t请输入性别(1 男 2 女):");
        scanf("%d",&i_temp);
        if(i_temp!=1 && i_temp!=2)
        {
            printf("\t性别选择错误.");
            continue;
        }else
        {
            if(i_temp==1)
            {
                strcat(stu_temp[0],"男");
            }else
            {
                strcat(stu_temp[0],"女");
            }
            strcat(stu_temp[0],"-$-");
                flag=3;
        }
    }
    //输入地址
    while(flag==3)
    {
        printf("\n\t请输入地址:");
        scanf("%s",&a_temp);
        if(strlen(i_temp)>30)
        {
            printf("\t地址长度过长.");
            continue;
        }else
        {
            strcat(stu_temp[0],a_temp);
            strcat(stu_temp[0],"-$-");
            flag=4;
        }
    }

    //输入手机号码
    while(flag==4)
    {
        printf("\n\t请输入手机号码:");
        scanf("%s",&c_temp);
        //判断是否存在非法字符
        for(i=0;i<=strlen(c_temp);i++)
        {
            if(c_temp[i]<'0'  || c_temp[i]>'9')
            {
                printf("\t手机号码中包含非数字字符.");
                break;
            }
        }
        if(strlen(c_temp)!=11)
        {
            printf("\t手机号码位数不正确.");
            continue;
        }else
        {
            strcat(stu_temp[0],c_temp);
            strcat(stu_temp[0],"-$-");
            flag=5;
        }
    }
    //输入成绩
    while(flag==5)
    {
        printf("\t请输入Java的成绩:");
        scanf("%d",i_temp);
        if(i_temp<0 || i_temp>100)
        {
            printf("\t成绩必须在0--100之间.");
            continue;
        }else
        {
            sprintf(c_temp,"%d",i_temp);
            strcat(stu_temp[0],i_temp);
            strcat(stu_temp[0],"-$-");
            flag=6;
        }
    }
    while(flag==6)
    {
        printf("\t请输入.Net的成绩:");
        scanf("%d",i_temp);
        if(i_temp<0 || i_temp>100)
        {
            printf("\t成绩必须在0--100之间.");
            continue;
        }else
        {
            sprintf(c_temp,"%d",i_temp);
            strcat(stu_temp[0],i_temp);
            strcat(stu_temp[0],"-$-");
            flag=7;
        }
    }
    //确认信息
    printf("\n\t**********确认学员信息如下**********\n");
    printf("%s",stu_temp);
    printf("\n\t确认信息么(y|n)?");
    scanf("%s",&c_temp);
    if(strcmp(c_temp,"y")==0 || strcmp(c_temp,"Y")==0)
    {
        strcpy(students[row],stu_temp[0]);
    }else
    {
            insertNewStu(row);
    }
        return flag;   
}

/***************************
    查找学员信息所在行
***************************/

int getStuRowByNo(char no[])
{
    int i,j;
    int pos=-1;//相当于一个控制开关
    char temp[5]="";
   
    for(i=0;i<stu_num;i++)
    {
        for(j=1;j<strcspn(students[i],"-$-");j++)
        {
            temp[j]=students[i][j];
        }
        if(strcmp(no,temp)==0)//对比逗号两边的字符是否相等
        {
            pos=i;
            break;
        }
    }
    return pos;
}
/*******************
  删除指定学员信息
  *****************/

int deleteByNo()
{
    char no[5];
    int row;
    int i,j;

    printf("\n\t请输入要删除的学员学号:");
    scanf("%s",&no);
    row=getStuRowByNo(no);
    if(row==(-1))
    {
        printf("\n\t***********没有该学员的学号,请核实************");
        return -1;
    }else
    {
        for(i=row;i<50;i++)
        {
            for(j=0;j<300;j++)
                students[i][j]=students[i+1][j];
        }
        printf("\n\t***********删除成功**************");
        return 1;
    }
}

/******************
  解析学员的信息行
******************/

void analyse(char c[])
{
    int i,j;
    int token;
    char p_temp[100]="";

    token=strcspn(c,"-$-");
    //该行第一个分隔符之前的信息进行解析
    for(i=0;i<token;i++)
    {
        p_temp[i]=c[i];
    }
    printf("%s\t",p_temp);
    //去掉已经解析出的信息项,将后面的信息依次前移
    for(j=0;j<strlen(c)-token;j++)
    {
        c[j]=c[token+3+j];//3是分隔符的位数
    }
}
搜索更多相关主题的帖子: result include void 
2012-09-09 10:40
Snail_蜗牛
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-8-10
收藏
得分:0 
  自己搞定了...看来以后不能发太长的代码了...
2012-09-09 18:04
快速回复:信息管理系统的一部分的两个问题:输入信息到地址系统报错;该删的没删, ...
数据加载中...
 
   



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

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