C语言||作业01
1.需求分析
首先要定义一个全局变量sum记录总人数,定义结构体变量里面有名字,编号,电话号码,使用string文件头用来交换修改人的电话号码和名字的排序。
只要越界就报错。定义的count记为添加的人数,利用count来判断是非添加人数,或者用来判断查找,修改,添加报错(已经有记录或者无记录)的依据。
具体使用宏以及指针,文件,链表还没有看懂,之后经行修改。
2.程序代码
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int sum=50,count=0;
void input();//输入信息
void search();//查询
void update();//修改
void del();//删除
void menu(); //主菜单
void Error();//错误信息
void sort();//排序
void namesort();//名字排序
void numbersort();//编号排序
struct Preson{
int number;
char name[10];
char phone[20];
struct Preson *next;
};
Preson stu[50];
Preson t;
Preson *s;
Preson t1;
void menu()
{
printf("\n");
printf("操作列表:\n");
printf("1)排序 2)添加 3)删除\n");
printf("4)修改 5)查找 6)退出程序\n");
printf("请输入操作: ");
}
int main()
{
int flag=1,i,j,n;
while( 1 )
{
system("cls");
printf("========== 通讯录 ==========\n\n\n");
printf("");
printf("========== 界面 ==========\n");
printf("人数: %d 人 | 剩余空间: %d 人\n",count,sum);
//排序
for( i=0; i<count; i++ )
{
printf("编号:%10d | 名字:%10s | 电话号码:%10s\n",stu[i].number,stu[i].name,stu[i].phone);
}
menu();
scanf("%d",&n);
switch(n)
{
case 1: sort();break;
case 2: input(); break;
case 3: del();break;
case 4: update();break;
case 5: search();break;
case 6: return 0;
default: Error();break;
}
}
}
void input()
{
int i,flag=1;
if(sum==0)
{
printf("人数已经满了\n");
}
else if(sum!=0&&flag!=0)
{
printf("请输入编号:");
scanf("%d",&stu[count].number);
if(stu[count].number>50||stu[count].number<=0)
{
printf("超过编号");
system("pause");
}
else
{
for( i=0; i<count; i++)
{
if( stu[i].number==stu[count].number ) {flag=0;printf("已经有该数据");system("pause");}
}
if( flag!=0 )
{
printf("请输入名字:");
scanf("%s",stu[count].name);
printf("请输入电话号码:");
scanf("%s",stu[count].phone);
count++;
sum--;
}
if(flag==0)
{
void Error();
printf("已经有个该编号\n");
}
}
}
}
void search()
{
char name[20];
int b=0,j=0;
Preson *p;
p=stu;
printf("请输入需要查询人的名字:");
scanf("%s",name);
while(j!=count)
{
if(strcmp(name,p->name)==0)
{
b=1;
break;
}
p++;
j++;
}
if(b==0)
{
printf("\n没有这个人\n");
system("pause");
}
else
{
printf("编号:%10d | 名字:%10s | 电话号码:%10s\n",p->number,p->name,p->phone);
system("pause");
}
}
void update()
{
int i,j=0,flag=1,number;
char name[15];
char phone[20];
if(count==0)
{
printf("你还还没有存储信息");
system("pause");
}
else
{
printf("请输入需要修改人的编号:");
scanf("%d",&number);
while(j!=count)
{
if(number==stu[j].number)
{
printf("请输入需要修改人的名字:");
scanf("%s",&name);
strcpy(stu[j].name,name);
printf("请输入需要修改人的电话:");
scanf("%s",&phone);
strcpy(stu[j].phone,phone);
break;
}
else
j++;
}
if(j==count)
{
printf("没有这个人!\n");
system("pause");
}
}
}
void del()
{
Preson *s;
s=stu;
int i,j,flag=count;
int number;
if(count==0)
{
printf("还没有存储联系人\n");
system("pause");
}
else
{
printf("请数入该联系人编号:");
scanf("%d",&number);
if(number<=50||number>=0)
{
for( i=0; i<count; i++ )
{
if(number==(s->number))
{
for( j=i; j<count; j++ )
{
stu[j]=stu[j+1];
}
count--;
printf("已经删除!\n");
}
s++;
}
}
else
{
printf("已经越界,请输入正确数值");
}
}
if(count==flag)
{
printf("没有这个人\n");
system("pause");
}
}
void Error()
{
printf("没有该选项,nmsl请看清楚点 ");
system("pause");
}
void sort()
{
int N;
printf("请选择排序方式: 1)编号排序 2)名字排序");
scanf("%d",&N);
if(count==0)
{
printf("你还没有输入信息");
system("pause");
}
else
{
switch(N)
{
case 1:numbersort();break;
case 2:namesort();break;
}
}
}
void numbersort()
{
int i,flag,j;
for( i=0; i<count; i++ )
{
flag=0;
for( j=0; j<count-1-i; j++ )
{
if(stu[j].number>stu[j+1].number)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}
}
void namesort()
{
int i,j;
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(strcmp(stu[i].name,stu[j].name)>0)
{
t1=stu[i];
stu[i]=stu[j];
stu[j]=t1;
}
}
}
}
3.函数调用图与流程图
4.功能测试
1.添加
(越界和错误操作)
2.删除
(越界或者无该信息)
3.修改
(越界或者无该信息)
4.查找
(没有这个人或者越界)
5.退出程序
(错误操作)
6.排序
6.1编号排序
6.2名字排序
5.应用集成
Gitee上传截图与链接
链接:https://gitee.com/zhou_wango/E-zuoye