直接上源码了, 求大神指点
#include
#include
#include
#define STU_INFO_FILE "d:\classmates_info_file.txt" //定义文本信息存储路径
#define FAILURE 0xFFFFFFFF
#define SUCCESS !0xFFFFFFFF
#define MAX_STU_COUNT 60
int size = 59; //设置全局变量size用来记录通讯录的个数,和数组的下标一致换句话说就是学生的个数减去1
int judge;
char name[MAX_STU_COUNT][10+1]; //存放姓名,每个班级50人,名字最长为10个字符;
char email[MAX_STU_COUNT][20+1]; //存放姓名,每个班级50人,名字最长为10个字符;
__int64 student_number[MAX_STU_COUNT]; //学号过长,即便unsigned int也不够存储,采用64位整型;
__int64 mobile_phone_number[MAX_STU_COUNT];
__int64 qq_number[MAX_STU_COUNT];
int AddStuInfoFromFile()
{
int tmpi;
char student_number_char[13 + 1];
char mobile_phone_number_char[11 + 1];
char qq_number_char[10 + 1];
FILE * pFile = NULL;
pFile = fopen(STU_INFO_FILE, "r");
if(!pFile)
{
printf("AddStuInfoFromFile: File Open Failed!\n");
return FAILURE;
}
else
printf("AddStuInfoFromFile: File Open Succeeded!\n");
memset(student_number,0,8); //memset(数组名,要初始化的值,大小)
memset(mobile_phone_number,0,8);
memset(qq_number,0,8);
memset(name,0,MAX_STU_COUNT * (10 + 1));
memset(email,0,MAX_STU_COUNT * (20 + 1));
for(tmpi = 0; tmpi < MAX_STU_COUNT; tmpi++)
{
fscanf(pFile,"%s",student_number_char);
fscanf(pFile,"\t%s",name[tmpi]);
fscanf(pFile,"\t%s",mobile_phone_number_char);
fscanf(pFile,"\t%s",email[tmpi]);
fscanf(pFile,"\t%s\n",qq_number_char);
student_number[tmpi] = _atoi64(student_number_char);
mobile_phone_number[tmpi] = _atoi64(mobile_phone_number_char);
qq_number[tmpi] = _atoi64(qq_number_char);
if(student_number[tmpi]==student_number[tmpi-1]){
tmpi = tmpi - 1;
size = tmpi;
break;}
//截止到此一共是tmpi位学生 编号从 0~tmpi-1 ; 若需要输出第n位学生则 则下表为 n-1
/*
printf("name %d is %s\n", tmpi, name[tmpi]);
printf("email %d is %s\n", tmpi, email[tmpi]);
printf("qq_number %d is %I64d\n",tmpi, qq_number[tmpi]);
*/
}
fclose(pFile);
return SUCCESS;
}
void outputAll()
{
int tmpi;
if(judge == FAILURE)
return;
for(tmpi = 0; tmpi <= size; tmpi++)
{
printf("%I64d\t%s\t%I64d\t%s\t%I64d\n", student_number[tmpi], name[tmpi],
mobile_phone_number[tmpi], email[tmpi],qq_number[tmpi]);
}
}
void output(int index);
int delete2(int n);
int insert(int index);
int find(__int64 mobile,__int64 QQ);
int main()
{
int n,n2,n3;
__int64 mobile=0,QQ=0;
if(judge = AddStuInfoFromFile()==FAILURE)
return FAILURE;
printf("请选择您所需操作:\n");
printf("1.查询\t2.插入\n3.删除\t4.输出通讯录\n");
char ch=getchar();
switch(ch){
case '1' :{
printf("请输入要查询学生的手机号码或者QQ号码,不选择项请填写数字0\n");
printf("手机号码:");
scanf("%I64d",&mobile);
printf("QQ号码:");
scanf("%I64d",&QQ);
find(mobile,QQ);}break;//查询
case '2' : {
if(size==59)//应该放在该函数之前
printf("超出了学生个数个数的范围\n");
else{
printf("请输入要插入的位置:");
scanf("%d",&n3);
insert(n3);
}}break;//插入
case '3' :{
printf("请出入要删除学生的编号:");
scanf("%d",&n2);
delete2(n2);
}break;//删除
case '4' :{
printf("请选择:\n1.输出第n位同学\n2.输出整个通讯录\n") ;
char ch2 = getchar();//清楚一个缓存
ch2 = getchar();
switch (ch2){
case '1' :{
printf("请输入要输出学生的编号:") ;
scanf("%d",&n);
output(n);};break;
case '2' :outputAll();break;
default :printf("您输入的操作序号无法识别\n");
}
}break;//输出通讯录
default :printf("您输入的操作序号无法识别\n");
}
printf("请输入要输出学生的编号:") ;
scanf("%d",&n);
output(n);
return SUCCESS;
}
void output(int index)
{
int tmpi;
if(judge == FAILURE)
return;
if(index-1>size)
printf("超出了学生个数的范围");
else if(index<1)
printf("输入的学生代号不正确\n");
else
printf("%I64d\t%s\t%I64d\t%s\t%I64d\n", student_number[index-1], name[index-1],
mobile_phone_number[index-1], email[index-1],qq_number[index-1]);
}
int find(__int64 mobile,__int64 QQ) //返回值为下标
{
int a1=-1,a2=-1;
int n;
if(mobile != 0){
if(mobile>=10000000000&&mobile<=99999999999){
for(n=0;n<=size;n++){
if(mobile_phone_number[n]== mobile){
a1=n;break; }
}
if(a1==-1){
printf("未找到对应的同学\n");
return FAILURE;}
}
else{
printf("输入的手机号码不正确\n");return FAILURE;}
}
//下面是 手机号为0
if(QQ!=0){
if(QQ>0&&QQ<=9999999999){
for(n=0;n<=size;n++){
if(qq_number[n]==QQ){
a2=n;break; }
if(a2==-1){
printf("未找到对应的同学\n");return FAILURE;}} }
else
printf("输入的qq号码不正确\n");return FAILURE;}
if(QQ==0&&mobile==0){
printf("您没有输入需要搜索的手机号或QQ\n");return FAILURE;}
if(a1==a2&&a1!=-1){
output(a1+1);
return a1;
}
int insert(int index) //要求用户输入数据;
{
if(index>size+2){
printf("超出了可插入的范围\n");return FAILURE;}
else if(index<1){
printf("输入的学生代号不正确\n");return FAILURE;}
else{int size2=size;
for(; size2+1 >= index ;size2--){ // 要删除第4个 下 标是3 最大下标是 size=6 是三的呗死替代 n为5 下标为4 size为
//6 用下标为5 的替代下标为 4 的 n变为6 下标 5 size=6 下标为6的代替下标为5的 size= 6 n为7
student_number[size2+1] = student_number[size2];
mobile_phone_number[size2+1] =mobile_phone_number[size2];
qq_number[size2+1] = qq_number[size2];
strcpy(name[size2+1],name[size2]);
strcpy(email[size2+1],email[size2]);}
size++;
char student_number_char[13 + 1];
char mobile_phone_number_char[11 + 1];
char qq_number_char[10 + 1];
char ch=getchar();
printf("请输入该同学的姓名:");
gets(name[index-1]);
printf("请输入该同学的邮箱:");
gets(email[index-1]);
printf("请输入该同学的学号:");
gets(student_number_char);
printf("请输入该同学的手机号码:");
gets(mobile_phone_number_char);
printf("请输入该同学的QQ号码:");
gets(qq_number_char);
student_number[index-1] = _atoi64(student_number_char);
mobile_phone_number[index-1] = _atoi64(mobile_phone_number_char);
qq_number[index-1] = _atoi64(qq_number_char);
printf("已插入:(位置%d)\n",index);
output(index);
return index;
}
//用find查找信息
}
int delete2(int n)
{
if(n>size+1) {
printf("超出了学生个数个数的范围");
return FAILURE;}
else if(n<1){
printf("输入的学生代号不正确\n");
return FAILURE;}
else{
printf("已删除以下学生信息:\n");
output(n);
for(;n<=size;n++){ // 要删除第4个 下 标是3 最大下标是 size=6 是三的呗死替代 n为5 下标为4 size为
//6 用下标为5 的替代下标为 4 的 n变为6 下标 5 size=6 下标为6的代替下标为5的 size= 6 n为7
student_number[n-1] = student_number[n];
mobile_phone_number[n-1] =mobile_phone_number[n];
qq_number[n-1] = qq_number[n];
strcpy(name[n-1],name[n]);
strcpy(email[n-1],email[n]);}
size--;}
}}