经过一个多月和组员的努力,终于写出了我们人生中第一个系统,现将它分享在这里。希望给大家提供一些帮助。
因为自己的指针没怎么学好,所以整个编程我使用的是结构体。
头文件
自己使用的头文件较少,但都是必要的哦
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
结构体
结构体的元素是按照老师要求来的。
struct magazine
{
char name[40]; //姓名
char sex[10]; //性别
char addr[100]; //地址
char tel[12]; //电话号码
float price; //杂志单价
int num; //订阅数
float total; //总费用
char date[30]; //截止订阅的期限
}student[20]; //容纳的最大数为20
一开始定义了一个全局变量当做已经输入的人数。有一些在程序中运行不出来的,我也放到了这里。
int a,d,s; //定义全局变量a,表示已经输入的人数
主菜单界面
为了界面的好看,自己设计了一些东西。
int menu() //主菜单界面
{
char b[80];
int c; //定义整型变量
system("cls");
printf("\t\t\t\t\t***********************************\n");
printf("\t\t\t\t\t 欢迎来到XX杂志订阅管理中心 \n");
printf("\t\t\t\t\t 0.添加新的订户信息 \n");
printf("\t\t\t\t\t 1.查找订户的信息 \n");
printf("\t\t\t\t\t 2.删除过期的订户信息 \n");
printf("\t\t\t\t\t 3.统计所有订户的账单信息 \n");
printf("\t\t\t\t\t 4.退出界面 \n");
printf("\t\t\t\t\t***********************************\n");
do
{
printf("\t\t\t\t\t 请从0--4中选择您的操作: \n");
scanf("%s",b);
c=atoi(b); //将字符串转换成长整型数
}
while(c<0||c>4);
return c;
}
添加函数
因为是使用的结构体,所以添加部分写的很简单。每个部分我都加上了清屏函数,下面的部分我就不提了。添加完之后会返回到菜单界面。
int add() //添加订户信息
{
system("cls");
for(a=0;a<20;a++)
{
printf("\t\t\t**************** 请输入用户信息 ****************\n");
printf("\t\t\t请输入订户的姓名:\n");
scanf("%s",&student[a].name);
printf("\t\t\t请输入订户的性别:\n");
scanf("%s",&student[a].sex);
printf("\t\t\t请输入订户的地址:\n");
scanf("%s",&student[a].addr);
printf("\t\t\t请输入订户的电话号码:\n");
scanf("%s",&student[a].tel);
printf("\t\t\t请输入杂志单价:\n");
scanf("%f",&student[a].price);
printf("\t\t\t请输入订阅数:\n");
scanf("%d",&student[a].num);
printf("\t\t\t请输入截止订阅的期限(月):\n");
scanf("%s",&student[a].date);
printf("\t\t\t输入1继续添加输入0结束:\n");
scanf("%d",&s);
if(s==0)
break;
}
menu();
return(0);
}
查找函数
查找部分为了简便易观,写的稍微长点。这个稍微有点问题,第一遍输入它会显示没有相同姓名的用户记录。推荐先打开统计函数,再打开这个查找函数。或者你进入两边查找函数,也可以解决问题。
int find() //查找函数
{
int mark=0;
int e;
printf("\t\t\t************** 按姓名查找 **************\n");
char name[20];
printf("\t\t\t 请输入需要查找的姓名:\n");
scanf("%s",&name);
for(e=0;e<a;e++)
{
if(strcmp(student[e].name,name)==0)
{
printf("\t\t\t********** 以下是您查找的用户信息 ********\n");
printf("\t\t\t姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限\n");
printf("\t\t\t%s %s %s %s %f %d %s\n",student[e].name,student[e].sex,student[e].addr,student[e].tel,student[e].price,student[e].num,student[e].date);
mark++;
if((e+1)<a)
{
printf("\t\t\t是否继续查找相同名字的用户信息:(y/n)\n");
if(getch()=='y' || getch()=='Y')
{
continue;
}
else
return(0);
}
else
{
printf("\t\t\t按任意键返回主菜单");
getch();
return(0);
}
}
}
if(mark == 0)
{
printf("\t\t\t没有相同姓名的用户纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return(0);
}
return 0;
}
删除函数
删除函数稍微麻烦一点,这个折腾了我们很久,后来参照别人的有了灵感写出来了。
void dele() //删除函数
{
int i,j;
int deletemark=0;
char phone[20];
printf("\t\t\t请输入要删除用户电话号码:\n");
scanf("%s",phone);
if(a==0)
{
printf("\t\t\t对不起,文件中无任何纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return;
}
for (i=0;i<a;i++)
{
if (strcmp(student[i].tel,phone)==0)
{
printf("\t\t\t以下是您要删除的用户纪录:\n");
printf("\t\t\t姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限\n");
printf("\t\t\t%s %s %s %s %f %d %s\n",student[i].name,student[i].sex,student[i].addr,student[i].tel,student[i].price,student[i].num,student[i].date);
printf("\t\t\t是否删除?(y/n)");
if (getch()=='y' || getch()=='Y')
{
for (j=i;j<a-1;j++)
student[j]=student[j+1];
a--;
deletemark++;
printf("\t\t\t删除成功\n");
printf("\t\t\t是否继续删除?(y/n)\n");
if (getch()=='y' || getch()=='Y')
dele();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\t\t\t没有该用户的纪录\n");
printf("\t\t\t是否继续删除?(y/n)\n");
if(getch()=='y' || getch()=='Y')
dele();
return;
}
return;
}
统计函数
这个很简单,利用循环把所有记录的东西显示出来即可。
void statistics() //统计函数
{
for(a=0;a<20;a++)
{
student[a].total=student[a].price*student[a].num;
}
system("cls");
printf("\t\t\t************************* 以下为通讯录所有信息**********************\n");
printf("\t\t\t姓名 性别 地址 电话号码 杂志单价 订阅数 总费用 订阅期限\n");
for(a=0;a<20;a++)
printf("\t\t\t%s %s %s %s %f %d %f %s\n",student[a].name,student[a].sex,student[a].addr,student[a].tel,student[a].price,student[a].num,student[a].total,student[a].date);
printf("\t\t\t********************************************************************\n");
getch(); //无回显的输入字符,输入的字符不会显示
return;
}
主函数
主函数主要就是调用以上的函数,我利用switch将它们连接起来,虽然大部分写程序都是这样,哈哈。
int main()
{
int selectnum;
while(1)
{
selectnum=menu(); //将menu函数赋给变量selectnum
switch(selectnum) //将selectnum变量作为switch的运行条件
{
case 0:
add();
break;
case 1:
find();
break;
case 2:
dele();
break;
case 3:
statistics();
break;
case 4:
printf("\t\t\t\t\t退出成功,下次再见!\n");
system("pause");
getchar();
exit(0);
}
}
system("cls");
getchar();
return 0;
}
就是如此,这个程序是在VC++2010版本上写的,应该在其他的版本上面也能运行。
下面就是完整的源代码:
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct magazine
{
char name[40]; //姓名
char sex[10]; //性别
char addr[100]; //地址
char tel[12]; //电话号码
float price; //杂志单价
int num; //订阅数
float total; //总费用
char date[30]; //截止订阅的期限
}student[20]; //容纳的最大数为20
int a,d,s; //定义全局变量a,表示已经输入的人数
int menu() //主菜单界面
{
char b[80];
int c; //定义整型变量
system("cls");
printf("\t\t\t\t\t***********************************\n");
printf("\t\t\t\t\t 欢迎来到XX杂志订阅管理中心 \n");
printf("\t\t\t\t\t 0.添加新的订户信息 \n");
printf("\t\t\t\t\t 1.查找订户的信息 \n");
printf("\t\t\t\t\t 2.删除过期的订户信息 \n");
printf("\t\t\t\t\t 3.统计所有订户的账单信息 \n");
printf("\t\t\t\t\t 4.退出界面 \n");
printf("\t\t\t\t\t***********************************\n");
do
{
printf("\t\t\t\t\t 请从0--4中选择您的操作: \n");
scanf("%s",b);
c=atoi(b); //将字符串转换成长整型数
}
while(c<0||c>4);
return c;
}
int add() //添加订户信息
{
system("cls");
for(a=0;a<20;a++)
{
printf("\t\t\t**************** 请输入用户信息 ****************\n");
printf("\t\t\t请输入订户的姓名:\n");
scanf("%s",&student[a].name);
printf("\t\t\t请输入订户的性别:\n");
scanf("%s",&student[a].sex);
printf("\t\t\t请输入订户的地址:\n");
scanf("%s",&student[a].addr);
printf("\t\t\t请输入订户的电话号码:\n");
scanf("%s",&student[a].tel);
printf("\t\t\t请输入杂志单价:\n");
scanf("%f",&student[a].price);
printf("\t\t\t请输入订阅数:\n");
scanf("%d",&student[a].num);
printf("\t\t\t请输入截止订阅的期限(月):\n");
scanf("%s",&student[a].date);
printf("\t\t\t输入1继续添加输入0结束:\n");
scanf("%d",&s);
if(s==0)
break;
}
menu();
return(0);
}
int find() //查找函数
{
int mark=0;
int e;
printf("\t\t\t************** 按姓名查找 **************\n");
char name[20];
printf("\t\t\t 请输入需要查找的姓名:\n");
scanf("%s",&name);
for(e=0;e<a;e++)
{
if(strcmp(student[e].name,name)==0)
{
printf("\t\t\t********** 以下是您查找的用户信息 ********\n");
printf("\t\t\t姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限\n");
printf("\t\t\t%s %s %s %s %f %d %s\n",student[e].name,student[e].sex,student[e].addr,student[e].tel,student[e].price,student[e].num,student[e].date);
mark++;
if((e+1)<a)
{
printf("\t\t\t是否继续查找相同名字的用户信息:(y/n)\n");
if(getch()=='y' || getch()=='Y')
{
continue;
}
else
return(0);
}
else
{
printf("\t\t\t按任意键返回主菜单");
getch();
return(0);
}
}
}
if(mark == 0)
{
printf("\t\t\t没有相同姓名的用户纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return(0);
}
return 0;
}
void dele() //删除函数
{
int i,j;
int deletemark=0;
char phone[20];
printf("\t\t\t请输入要删除用户电话号码:\n");
scanf("%s",phone);
if(a==0)
{
printf("\t\t\t对不起,文件中无任何纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return;
}
for (i=0;i<a;i++)
{
if (strcmp(student[i].tel,phone)==0)
{
printf("\t\t\t以下是您要删除的用户纪录:\n");
printf("\t\t\t姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限\n");
printf("\t\t\t%s %s %s %s %f %d %s\n",student[i].name,student[i].sex,student[i].addr,student[i].tel,student[i].price,student[i].num,student[i].date);
printf("\t\t\t是否删除?(y/n)");
if (getch()=='y' || getch()=='Y')
{
for (j=i;j<a-1;j++)
student[j]=student[j+1];
a--;
deletemark++;
printf("\t\t\t删除成功\n");
printf("\t\t\t是否继续删除?(y/n)\n");
if (getch()=='y' || getch()=='Y')
dele();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\t\t\t没有该用户的纪录\n");
printf("\t\t\t是否继续删除?(y/n)\n");
if(getch()=='y' || getch()=='Y')
dele();
return;
}
return;
}
void statistics() //统计函数
{
for(a=0;a<20;a++)
{
student[a].total=student[a].price*student[a].num;
}
system("cls");
printf("\t\t\t************************* 以下为通讯录所有信息**********************\n");
printf("\t\t\t姓名 性别 地址 电话号码 杂志单价 订阅数 总费用 订阅期限\n");
for(a=0;a<20;a++)
printf("\t\t\t%s %s %s %s %f %d %f %s\n",student[a].name,student[a].sex,student[a].addr,student[a].tel,student[a].price,student[a].num,student[a].total,student[a].date);
printf("\t\t\t********************************************************************\n");
getch(); //无回显的输入字符,输入的字符不会显示
return;
}
int main()
{
int selectnum;
while(1)
{
selectnum=menu(); //将menu函数赋给变量selectnum
switch(selectnum) //将selectnum变量作为switch的运行条件
{
case 0:
add();
break;
case 1:
find();
break;
case 2:
dele();
break;
case 3:
statistics();
break;
case 4:
printf("\t\t\t\t\t退出成功,下次再见!\n");
system("pause");
getchar();
exit(0);
}
}
system("cls");
getchar();
return 0;
}
没有思路的学弟学妹们,可以来看看哦,嘿嘿。