level 1
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "process.h" /*exit()函数的头文件*/
#define PASSWORD 707374
#define MAX 100
#define SAVE_ADDRESS "d:\\data.txt"
struct student{
char num[20];
char name[10];
char sex[5];
char clas[10];
char tel[15];
char qq[15];
};
int main_menu();
int add_data(struct student *p,int n);
int delete_data(struct student *p,int n);
void alter_data(struct student *p,int n);
void sort_num(struct student *p,int n);
void sort_name(struct student *p,int n);
void swap(struct student *p1,struct student *p2)
int search_num(struct student *p,int n);
int search_name(struct student *p,int n);
int search_tel(struct student *p,int n);
int get_i_num(struct student *p,int n);
int get_i_name(struct student *p,int n);
int get_i_tel(struct student *p,int n);
void list(struct student *p,int n,int m);
void save_file(struct student *p,int n);
int main(void)
{
struct student stu[MAX];
FILE *fp;
int n=0;
char y_n[5];
int choice;
printf("是否载入已有数据文件? (yes/no):");
scanf("%s",y_n);
if((strcmp(y_n,"yes")==NULL)){
if((fp=fopen("SAVE_ADDRESS","r"))==NULL){
printf("打开文件时出现错误!\n");
exit(0);
2010年06月16日 09点06分
1
level 1
break;
case 10:
save(stu,n);
break;
}
}
return 0;
}
int main_menu()
{
int choice;
printf("\n选项\n");
printf("----- 编辑条目 -----\n");
printf("1 - 新增条目\n");
printf("2 - 删除条目\n");
printf("3 - 修改条目\n");
printf("----- 对条目排序 -----\n");
printf("4 - 按学号排序\n");
printf("5 - 按姓名排序\n");
printf("----- 搜索条目 -----\n");
printf("6 - 根据学号搜索\n");
printf("7 - 根据姓名搜索\n");
printf("8 - 根据电话搜索\n");
printf("----------------------\n");
printf("9 - 列出所有条目");
printf("10 - 保存文件");
printf("0 - 退出系统\n");
printf("请输入你所需要的操作前面的序号\n");
scanf("%d",&choice);
return choice;
}
int add_data(struct student *p,int n)
{
struct student *stu=p;
int no_;
for(no_=n;no_<MAX;no_++){
printf("输入第%d个同学的信息\n",no_+1);
printf("学号:\n");
scanf("%s",(p+no_)->num);
if (strcmp((p+no_)->num,"e")==0)
break;
printf("姓名:\n");
scanf("%s",(p+no_)->name);
printf("性别:\n");
scanf("%s",(p+no_)->sex);
printf("班级:\n");
scanf("%s",(p+no_)->clas);
printf("电话:\n");
scanf("%s",(p+no_)->tel);
2010年06月16日 09点06分
3
level 1
printf("QQ:\n");
scanf("%s",(p+no_)->qq);
}
return no_;
}
int delete_data(struct student *p,int n)
{
int i;
int choice;
printf("以什么形式搜索条目? 1 - 学号 2 - 姓名 3 - 电话\n");
scanf("%d",choice);
if(choice==1){
i=search_num(p,n);
if(i>=0)
for(;i<n;i++)
p[i]=p[i+1];
n=n-1;
printf("\n该条目已删除\n");
}
else if(choice==2){
i=search_name(p,n);
if(i>=0)
for(;i<n;i++)
p[i]=p[i+1];
n=n-1;
printf("\n该条目已删除\n");
}
else{
i=search_tel(p,n);
if(i>=0)
for(;i<n;i++)
p[i]=p[i+1];
n=n-1;
printf("\n该条目已删除\n");
}
return n;
}
void alter_data(struct student *p,int n)
{
int i;
int choice;
printf("以什么形式搜索条目? 1 - 学号 2 - 姓名 3 - 电话\n");
scanf("%d",choice);
if(choice==1){
i=search_num(p,n);
if(i>=0)
printf("请输入新的信息:\n");
printf("学号:\n");
scanf("%s",(p+i)->num);
printf("姓名:\n");
2010年06月16日 09点06分
4
level 1
scanf("%s",(p+i)->name);
printf("性别:\n");
scanf("%s",(p+i)->sex);
printf("班级:\n");
scanf("%s",(p+i)->clas);
printf("电话:\n");
scanf("%s",(p+i)->tel);
printf("QQ:\n");
scanf("%s",(p+i)->qq);
printf("\n信息修改成功!\n");
}
else if(choice==2){
i=search_name(p,n);
if(i>=0)
printf("请输入新的信息:\n");
printf("学号:\n");
scanf("%s",(p+i)->num);
printf("姓名:\n");
scanf("%s",(p+i)->name);
printf("性别:\n");
scanf("%s",(p+i)->sex);
printf("班级:\n");
scanf("%s",(p+i)->clas);
printf("电话:\n");
scanf("%s",(p+i)->tel);
printf("QQ:\n");
scanf("%s",(p+i)->qq);
printf("\n信息修改成功!\n");
}
else{
i=search_tel(p,n);
if(i>=0)
printf("请输入新的信息:\n");
printf("学号:\n");
scanf("%s",(p+i)->num);
2010年06月16日 09点06分
5
level 1
printf("姓名:\n");
scanf("%s",(p+i)->name);
printf("性别:\n");
scanf("%s",(p+i)->sex);
printf("班级:\n");
scanf("%s",(p+i)->clas);
printf("电话:\n");
scanf("%s",(p+i)->tel);
printf("QQ:\n");
scanf("%s",(p+i)->qq);
printf("\n信息修改成功!\n");
}
}
void sort_num(struct student *p,int n)
{
int i,j;
int choice;
printf("以什么形式排序条目? 1 - 升序 2 - 降序\n");
scanf("%d",choice);
if(choice==1){
for(i=1;i<n;i++)
for(j=0;j<n-1;j++)
if(strcmp((p+j)->num,(p+j+1)->num)>0)
swap((p+j),(p+j+1));
}
else{
for(i=1;i<n;i++)
for(j=0;j<n-1;j++)
if(strcmp((p+j)->num,(p+j+1)->num)<0)
swap((p+j),(p+j+1));
}
printf("排序完成!");
}
void sort_name(struct student *p,int n)
{
int i,j;
int choice;
printf("以什么形式排序条目? 1 - 升序 2 - 降序\n");
scanf("%d",choice);
if(choice==1){
for(i=1;i<n;i++)
for(j=0;j<n-1;j++)
if(strcmp((p+j)->name,(p+j+1)->name)>0)
2010年06月16日 09点06分
6
level 1
swap((p+j),(p+j+1));
}
else{
for(i=1;i<n;i++)
for(j=0;j<n-1;j++)
if(strcmp((p+j)->num,(p+j+1)->num)<0)
swap((p+j),(p+j+1));
}
printf("排序完成!");
}
void swap(struct student *p1,struct student *p2)
{
struct student temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int search_num(struct student *p,int n)
{
int i;
char num[20];
printf("请输入要查找的学号:\n");
scanf("%s",num);
i=get_i_num(p,n,num);
if(i==-1)
printf("抱歉,没有相关条目");
else
list(p,i,i);
return i;
}
int search_name(struct student *p,int n)
{
int i;
char name[10];
printf("请输入要查找的姓名:\n");
scanf("%s",name);
i=get_i_name(p,n,name);
if(i==-1)
printf("抱歉,没有相关条目");
else
list(p,i,i);
return i;
}
int search_tel(struct student *p,int n)
{
int i;
char tel[15];
printf("请输入要查找的电话:\n");
scanf("%s",tel);
i=get_i_tel(p,n,tel);
if(i==-1)
printf("抱歉,没有相关条目");
else
list(p,i,i);
return i;
}
int get_i_num(struct student *p,int n,char *num)
{
int i;
for(i=0;i<n;i++){
if(strcmp((p+i)->num,num)==0)
return i;
}
return -1;
}
int get_i_name(struct student *p,int n,char *name)
{
int i;
for(i=0;i<n;i++){
2010年06月16日 09点06分
7
level 0
int get_i_num(struct student *p,int n);
int get_i_name(struct student *p,int n);
int get_i_tel(struct student *p,int n);
改成
int get_i_num(struct student *p,int n,char *num);
int get_i_name(struct student *p,int n,char *name);
int get_i_tel(struct student *p,int n,char *tel);
函数参数定义不一致
2010年06月16日 13点06分
11
level 2
void swap(struct student *p1,struct student *p2)
改成
void swap(struct student *p1,struct student *p2);
缺少;符号
case 10:
save(stu,n);
break;
改成
case 10:
save_file(stu,n);
break;
定义中无save函数
大功告成
2010年06月16日 13点06分
12