#include
#include
//声明函数
int menu();
void init();
void listStu();
int insertNewStu(int row);
int getStuRowByNo(char no[]);
int deleteByNo();
void analyse(char c[]);
int queryByNo();
int modifyInfoByNo();
/******************************************************************
students保存最多50名学生信息,每行通过-$-字符串分隔,
stu_num表示已存在的学生数目,假设存在2名学员
*********************************************************************/
//定义全局变量
char students[100][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");
result=queryByNo();
break;
case 4:
//printf("\t执行的操作:修改学员资料。\n");
result=modifyInfoByNo();
break;
case 5:
//printf("\t执行的操作:输出学员资料。\n");
listStu();
break;
case 0:
printf("\t谢谢使用!\n");
result=0;
break;
default:
printf("\t你输入的选择项不符!\n");
break;
}
}
}
/*************************************************************
打印系统菜单
*************************************************************/
//自定义无参menu函数
int menu(){
//定义变量接受用户的选择
int option;
//生成菜单
printf("\n\t-------------------------------------------------\n");
printf("\t|\t\t 学员信息管理系统 \t\t|\n");
printf("\t-------------------------------------------------\n\n");
printf("\t1.输入学员资料\n");
printf("\t2.删除学员资料\n");
printf("\t3.查找学员资料\n");
printf("\t4.修改学员资料\n");
printf("\t5.输出学员资料\n");
printf("\t0.退出\n\n\n");
printf("\t请输入你要进行的操作:");
//接受用户选择
scanf("%d",&option);
//返回用户的选择
return option;
}
/*******************************************************
初始化学员信息
*******************************************************/
void init(){
strcpy(students[0],"2010-$-张学友-$-男-$-香港-$-13601234567-$-80-$-60-$-");
strcpy(students[1],"2011-$-王菲-$-女-$-北京-$-13676543210-$-60-$-90-$-");
}
/*****************************************************
输出所有学员信息
******************************************************/
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 c_temp[20]; //手机号
char a_temp[30]; //地址
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];
}
//如果找到返回所在行i
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<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);j++){
c[j]=c[token+3+j];
}
}
/*****************************************************************
查找指定学员信息
*****************************************************************/
int queryByNo()
{
char no[5];
int row;
char temp[200];
printf("\n\t请输入要查找的学员学号:");
scanf("%s",&no);
//获取学员所在行位置
row=getStuRowByNo(no);
if(row==-1){
printf("\n\t*****没有该学号的学员信息,请核实*****");
return -1;
} else{
strcpy(temp,students[row]);
printf("\n\t*******该学号的学员信息如下*******\n");
printf("学号\t");
printf("姓名\t");
printf("性别\t");
printf("地址\t");
printf("手机\t\t");
printf("Java\t");
printf(".Net\n");
while(strlen(temp)!=0){
analyse(temp);
}
printf("\n");
}
}
/*****************************************************************
修改指定学员信息
*****************************************************************/
int modifyInfoByNo()
{
char no[5];
int row;
char temp[200];
printf("\n\t请输入要修改的学员学号");
scanf("%s",&no);
row=getStuRowByNo(no);
if(row==-1){
printf("\n\t*****没有该学号的学员信息,请核实*****");
return -1;
} else{
return insertNewStu(row);
}
}
成品下载地址:百度云盘