C语言Il作业01
2.1.1
这个作业属于哪个课程 | 2019级软件工程4班(中南林业科技大学涉外学院) |
---|---|
这个作业要求在哪里 | C语言Il作业01 |
这个作业的目标 | 尝试编写一个功能性强,容错率高的程序 |
参考资料 | C语言下的清屏函数 C语言全局变量和局部变量 |
2.2.2
按照题目要求,通讯录需要,排序,添加,删除,修改和查找功能.
因此用了常规的while循环保证每一次操作结束都能回到主函数直至选择结束选项,
选择排序实现排序功能,添加的数据用结构体来保存,
定义一个空的结构体覆盖这个数据来实现删除功能,
把原有数据修改来实现修改功能,
用for循环遍历来实现查找功能。
2.3.2 函数调用图与流程图
源代码
流程图
2.4 功能测试
增加
修改
排序
查找
删除
2.2.4 程序代码
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include<string.h>
int population=0,FreeSpace=50;
void Menu();
void Sort();
void Add();
void Delete();
void Modify();
void Search();
void Error();
struct AddressList
{
int number;
char name[10];
char phone[20];
}stu[50],temp;
int main()
{
int choose;
while(1)
{
int i,a;
system("cls");
printf("========== 通讯录 ==========\n");
printf("\n");
printf("\n");
printf("========== 界面 ==========\n");
printf("人数:%d人 | 剩余空间:%d人\n", population,FreeSpace );
for (i = 0; i < population; i++)
{
printf("编号: %10d| 姓名: %10s| 电话: %20s\n", stu[i].number, stu[i].name, stu[i].phone);
}
printf("\n");
printf("\n");
Menu();
scanf("%d",&a);
printf("\n");
switch(a)
{
case 1:
Sort();
system("cls");
break;
case 2:
Add();
system("cls");
break;
case 3:
Delete();
system("cls");
break;
case 4:
Modify();
system("cls");
break;
case 5:
Search();
system("cls");
break;
case 6:
printf("已退出程序");
system("pause");
return 0;
default:
printf("错误操作请重新输入");
system("cls");
break;
}
}
}
void Menu()
{
printf("\n\n\n操作列表:\n");
printf("1)排序 2)添加 3)删除\n");
printf("4)修改 5)查找 6)退出程序\n");
printf("请输入操作:");
}
void Sort()
{
int n,i,j,N;
printf("1)编号排序,2)名字排序\n");
printf("请选择你要排序的方式:\n");
scanf("%d", &n);
switch (n)
{
case 1:
for (i=0;i<N-1;i++)
for (j=i;j<N;j++)
{
if (stu[j].number > stu[j + 1].number)
{ // 比较
temp = stu[i];
stu[i]=stu[j];
stu[j] = temp; // 交换
}
}
break;
case 2:
for (i=0;i<N-1;i++)
for (j=i;j<N;j++)
{
if (strcmp(stu[i].name,stu[j].name) > 0)
{ // 比较
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp; // 交换
}
}
break;
default:
{
printf("错误操作请重新输入");
system("cls");
break;
}
}
}
void Add()
{
int i,flag=0;
if (FreeSpace == 0)
{
printf("通讯录已满\n");
system("pause");
}
else
{
printf("添加操作:\n");
printf("请输入添加位置:");
scanf("%d",&stu[population].number);
if(stu[population].number>50||stu[population].number<=0)
{
printf("处理编号超过阈值\n");
Sleep(3000);
return;
}
else
{
for(i=0;i<population;i++)
{
if (stu[population].number == stu[i].number)
{
printf("此处已有数据\n");
system("pause");
flag = 1;
}
}
if(flag==0)
{
printf("请输入联系人姓名:");
scanf("%s",stu[population].name);
printf("请输入联系人电话号码:");
scanf("%s",stu[population].phone);
population++;
}
}
}
}
void Delete()
{
int i,n,flag=0;
printf("删除操作:\n");
printf("请输入删除位置:");
scanf("%d",&n);
if(n>50||n<=0)
{
printf("处理编号超过阈值\n");
system("pause");
}
else
{
for(i=0;i<population;i++)
{
if(n==stu[i].number)
{
stu[i]=temp;
population--;
FreeSpace++;
flag=1;
}
}
if(flag==0)
{
printf("此处无数据\n");
system("pause");
}
}
}
void Modify()
{
int n,i,flag=0;
printf("请输入修改位置:");
scanf("%d",&n);
if(n>50||n<=0)
{
printf("处理编号超过阈值\n");
system("pause");
}
else
{
for(i=0;i<population;i++)
{
if(n==stu[i].number)
{
printf("已擦除原有信息,请重新输入\n");
printf("\n");
printf("请输入联系人姓名: ");
scanf("%s",stu[i].name);
printf("请输入联系人电话号码: ");
scanf("%s",stu[i].phone);
flag=1;
}
}
if(flag==0)
{
printf("此处无数据\n");
system("pause");
}
}
}
void Search()
{
int i, flag=-1;
char str[13];
printf("请输入你要查找对象的名字或者电话号码: ");
scanf("%s",str);
for(i=0;i<population;i++)
{
if(strcmp(stu[i].name,str)==0||strcmp(stu[i].phone,str)==0)
{
printf("编号: %10d| 姓名: %10s| 电话: %20s\n", stu[i].number, stu[i].name, stu[i].phone);
return;
}
}
if(flag==-1)
{
printf("查无此人\n\n");
system("pause");
return;
}
}
void Error()
{
printf("Error!!!\n错误操作指令,请重新输入\n");
system("pause");
}
3.2 函数调用图与流程图