jqdms_zy 2015-04-18 08:42 采纳率: 0%
浏览 1768

vc++6.0中代码问题:显示完整的现存学员信息后,还要显示主菜单

#include
#include
int menu();
void init();
void listStu();
int insertNewStu(int row);
int getStuRowByNo(char no[]);
int deleteByNo();
void analyse(char c[]);
/*****************************************************
students保存学生信息,最多50名
一行代表一个学员信息,每列通过-$-字符串将各项信息分开
stu_num表示已存在的学生数目,假设初始存在2名学员
******************************************************/
char students[5][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=stu_num+1;
        break;
    case 2:
        //printf("\t执行删除学员信息\n");
        result=deleteByNo();
        stu_num=stu_num-1;
        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您的输入有误。");
    }
}

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

printf("\t请选择您要进行的操作:");
scanf("%d",&option);

return option;

}
/*初始化2名学员信息*/
void init()
{
strcpy(students[0],"2010-$-张学友-$-男-$-香港-$-13601234567-$-80-$-60-$-");
strcpy(students[1],"2011-$-王菲-$-女-$-北京-$-13678904567-$-60-$-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\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(a_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("\n\t手机号码位数不正确。");
        continue;
    }else
    {
        strcat(stu_temp[0],c_temp);
        strcat(stu_temp[0],"-$-");
        flag=5;
    }
}
//输入Java的成绩
while(flag==5)
{
    printf("\n\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],c_temp);
        strcat(stu_temp[0],"-$-");
        flag=6;
    }
}
//输入.Net的成绩
while(flag==6)
{
    printf("\n\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],c_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=0;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**********没有该学号的学员信息,请核实**********\n");
    return -1;
}else
{
    for(i=row;i<50;i++)
    {
        for(j=0;j<200;j++)
        {
            students[i][j]=students[i+1][j];
        }
    }
    printf("\n\t********删除成功!********\n");
    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];
}

}
运行后显示主菜单,输入5,显示现存的学员信息,但是成绩显示不出来,成绩如果能显示,还需要显示主菜单。求解决。

  • 写回答

2条回答 默认 最新

  • huangshanchun 2015-04-18 11:16
    关注

    /*解析学员的信息行*/
    void analyse(char c[])
    {
    int i,j;
    int token;
    int len =0;
    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<(int)strlen(c)-token;j++)//
    {
        c[j]=c[token+3+j];
    }
    c[j]='\0';
    

    }
    //strlen(c) 返回的值是unsigned int c[j]='\0'; 字符串结束标识

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题