c语言编写一个通讯录系统 用简单一点的c😊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编写一个通讯录系统 用简单一点的c😊相关的知识,希望对你有一定的参考价值。
c语言编写一个通讯录系统
用简单一点的c😊(1)查看功能:
① 当输入某类时,显示出此类所有数据中的姓名和电话号码;
② 当输入某人姓名时,显示出此人的姓名、电话号码所在类;
③ 可以查看所有的来电记录、去电记录和未接电话记录,如果对方号码是你通讯录中已有的,则显示电话主人的姓名,否则显示对方号码;
(2)添加数据功能:
① 能录入新数据添加到通讯录文件中,当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,提示不能再录入新数据,录入的新数据能按递增的顺序自动进行条目编号。
② 模拟拨号、接听功能,自动将去电、来电、未接听情况记入通话情况表所对应的文件中
(3)修改功能:选中某个人的姓名时,可对此人在通讯录中的相应数据进行修改
(4)删除功能:选中某个人的姓名时,可对此人在通讯录中的相应数据进行删除,并自动调整后续条目的编号。
(5)主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。
#define SIZE 30
#include <stdio.h>
#include <string.h>
#include <conio.h>
struct student
char num[SIZE];
char name[SIZE];
char tel[SIZE];
;
/*函数声明*/
void myprint();/*显示菜单*/
int mycreat(struct student*p,int n);/*输入通讯录*/void mydisplay(struct student*p,int n);/*显示通讯录*/void mysearch(struct student*p,int n);/*查找*/
void mymodify(struct student*p,int n);/*修改通讯录*/int myadd(struct student*p,int n);/*增加通讯录*/int mydelete(struct student*p,int n);/*删除*/void mysort(struct student*p,int n);/*排序*/
void sch_num(struct student*p,int n);/*按学号查找*/void sch_name(struct student*p,int n);/*按姓名查找*/
int loadinfo(struct student*p,int n);/*载入通讯录信息*/int saveinfo(struct student*p,int n);/*保存通讯录信息*/void main()
/*文件定义*/char choose,yes_no;
struct studentrecord[N];/*存放通讯录信息,共100条*/int total=0,flag;/*通讯录总数*/
total=loadinfo(record,N);/*从文件读取记录信息,不超过100条*/do
myprint();/*显示菜单*/
printf("请选择:");do
choose=getchar();
while(choose<'0'||choose>'9');switch(choose)
case'1':
total=mycreat(record,total);break;case'2':
mydisplay(record,total);break;case'3':
mysearch(record,total);break;case'4':
mymodify(record,total);break;case'5':
total=myadd(record,total);break;case'6':
total=mydelete(record,total);break;case'7':
mysort(record,total);break;case'8':
flag=saveinfo(record,total);if(flag==1)
printf("\\n保存成功!\\n");else
printf("\\n保存失败!\\n");break;case'0':
break;default:
printf("\\n%c为非法选项!\\n",choose);
if(choose=='0')break;printf("\\n要继续选择吗(Y/N)?");do
yes_no=getchar();
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
while(yes_no!='Y'||yes_no!='y');
void myprint()/*显示菜单信息*/
printf("\\n\\n\\n\\n\\n");printf("\\n");printf("请输入选项编号(0--7)\\n");printf("1---批量输入通讯录\\n");printf("2---显示通讯录\\n");printf("3---查询通讯录\\n");printf("4---修改通讯录\\n");printf("5---添加通讯录\\n");printf("6---删除通讯录\\n");printf("7---排序通讯录\\n");printf("8---保存通讯录\\n");printf("0---退出\\n");printf("\\n");
int mycreat(struct student*p,int n)/*批量输入学生信息*/
int i=0;int m;
printf("添加前的记录,共有<%d>个:\\n",n);printf("\\n记录号学号姓名电话号码\\n");
i=0;
while((i<n)&&(strcmp(p->num,"")!=0))
printf("%d:%15s%15s%15s\\n",i+1,p->num,p->name,p->tel);i++;p++;
printf("\\n请输入要输入的学生人数(<%d):",N-n);
scanf("%d",&m);i=0;
while(i<m)
printf("\\n");
printf("请输入第%d个记录:\\n",i+1);printf("学号:");do
gets(p->num);
while(strcmp(p->num,"")==0);printf("姓名:");gets(p->name);
printf("电话号码:");gets(p->tel);p++;i++;
return m+n;
void mydisplay(struct student*p,int n)/*显示学生信息*/
/*clrscr();*/int i=0;
printf("\\n记录号学号姓名电话号码\\n");while(i<n)
printf("%d:%15s%15s%15s\\n",i+1,p->num,p->name,p->tel);p++;i++;
void mymodify(struct student*p,int n)/*修改学生信息*/
int i;
char nam[10];mydisplay(p,n);
printf("\\n请输入要修改记录的姓名:");gets(nam);
for(i=0;i<n;i++,p++)
if(strcmp(nam,p->name)==0)break;if(i==n)
printf("无此人!\\n");else
printf("请输入正确的学号:");do
gets(p->num);
while(strcmp(p->num,"")==0);printf("请输入正确的姓名:");gets(p->name);
printf("请输入正确的电话号码:");gets(p->tel);
void mysearch(struct student*p,int n)/*查找指定学生*/
char c;
mydisplay(p,n);
printf("\\n按学号查询(h),还是按姓名查询(m)?");c=getchar();
if(c=='h'||c=='H')
sch_num(p,n);else if(c=='m'||c=='M')
sch_name(p,n);else
printf("\\n非法字符!\\n");
void sch_num(struct student*p,int n)/*按学号查询*/
int i,flag=0;char nm[10];
printf("\\n请输入要查询记录的学号:");gets(nm);
for(i=0;i<n;i++)
if(strcmp(nm,p[i].num)==0)
printf("\\n学号姓名电话号码\\n");printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);flag=1;
if(flag==0)
printf("无此人!\\n");
void sch_name(struct student*p,int n)/*按姓名查询*/
int i,flag=0;char nam[10];
printf("\\n请输入要查询记录的姓名:");gets(nam);
for(i=0;i<n;i++)
if(strcmp(nam,p[i].name)==0)
printf("\\n学号姓名电话号码\\n");printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);flag=1;
if(flag==0)
printf("无此人!\\n");
int myadd(struct student*p,int n)/*增加学生信息*/
int i=0;char c;
struct studentt,*q;
printf("添加前的记录:\\n");printf("\\n学号姓名电话号码\\n");i=0;q=p;
/*显示原有记录信息*/while(i<n)
printf("%15s%15s%15s\\n",q->num,q->name,q->tel);i++;q++;do
printf("请输入新记录的学号:\\n");do
gets(t.num);
while(strcmp(t.num,"")==0);/*学号不能为空*/printf("请输入新记录的姓名:");gets(t.name);
printf("请输入新记录的电话号码:");gets(t.tel);
for(i=0;i<n;i++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0)
printf("学号或电话号码重,要重新输入吗(Y/N)?");c=getchar();putchar ('\\n');break;
/*找到最后,没有重复*/if(i==n)
*(p+i)=t;
printf("添加后的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n+1;i++)
printf("%15s%15s%15s\\n",(p+i)->num,(p+i)->name,p[i].tel);break;
while(c=='y'||c=='Y');return n+1;
int mydelete(struct student*p,int n)/*删除学生信息*/
int i,x;
char c,nm[10],nam[10];
printf("删除前的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);printf("按学号删除(h),还是按姓名删除(m)?");c=getchar();
if(c=='h'||c=='H')
printf("\\n请输入要删除记录的学号:");gets(nm);
for(x=0;x<n;x++)
gets(t.num);
while(strcmp(t.num,"")==0);/*学号不能为空*/printf("请输入新记录的姓名:");gets(t.name);
printf("请输入新记录的电话号码:");gets(t.tel);
for(i=0;i<n;i++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0)
printf("学号或电话号码重,要重新输入吗(Y/N)?");c=getchar();putchar ('\\n');break;
/*找到最后,没有重复*/if(i==n)
*(p+i)=t;
printf("添加后的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n+1;i++)
printf("%15s%15s%15s\\n",(p+i)->num,(p+i)->name,p[i].tel);break;
while(c=='y'||c=='Y');return n+1;
int mydelete(struct student*p,int n)/*删除学生信息*/
int i,x;
char c,nm[10],nam[10];
printf("删除前的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);printf("按学号删除(h),还是按姓名删除(m)?");c=getchar();
if(c=='h'||c=='H')
printf("\\n请输入要删除记录的学号:");gets(nm);
for(x=0;x<n;x++)
int j,i,k;char c1,c2;
struct studenttemp;
printf("\\n排序前的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);printf("\\n按学号排序(h),还是按姓名排序(m)?");c1=getchar();
if(c1=='h'||c1=='H')
printf("\\n按升序排序(s),还是按降序排序(j)?");c2=getchar();/*升序*/
if(c2=='s'||c2=='S')
for(i=0;i<n-1;i++)
k=i;
for(j=i;j<n;j++)
if(strcmp(p[k].num,p[j].num)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
printf("\\n排序后的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);
else if(c2=='j'||c2=='J')/*降序*/
for(i=0;i<n-1;i++)
k=i;
for(j=0;j<n;j++)
if(strcmp(p[k].num,p[j].num)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
printf("排序后的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);
else printf("\\n非法字符\\n");
else if(c1=='m'||c1=='M')/*按姓名排序*/
printf("\\n按升序排序(s),还是按降序排序(j)?");c2=getchar();
if(c2=='s'||c2=='S')
for(i=0;i<n-1;i++)
k=i;
for(j=0;j<n;j++)
if(strcmp(p[k].name,p[j].name)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
printf("排序后的记录:\\n");printf("\\n学号姓名电话号码\\n");for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);
else if(c2=='j'||c2=='J')/*降序*/
for(i=0;i<n-1;i++)
k=i;
for(j=i;j<n;j++)
if(strcmp(p[k].name,p[j].name)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
printf("排序后的记录:\\n");printf("\\n学号
姓名电话号码\\n");
for(i=0;i<n;i++)
printf("%15s%15s%15s\\n",p[i].num,p[i].name,p[i].tel);
else printf("\\n非法字符!\\n");
else printf("\\n非法字符!\\n");
int loadinfo(struct student*p,int n)/*载入通讯录信息*/
FILE*fp;int i,all=0;
char filename[30]="tongxunlu.txt";fp=fopen(filename,"r");if(fp==NULL)
printf("\\n***不能打开文件%s,或%s文件不存在,创建一个新文件!
",filename,filename);*/
fp=fopen(filename,"w");
fscanf(fp,"%d\\n",&all);
if(all>N)/*读取记录总数*/
printf("文件记录数太多,不能读取");return 0;
for(i=0;i<all;i++)/*读取记录信息*/
fscanf(fp,"%s%s%s\\n",p[i].num,p[i].name,p[i].tel);
fclose(fp);/*关闭文件*/return all;
int saveinfo(struct student*p,int n)
FILE*fp;int i,all=0;
char filename[30]="txl.dat";/*文件可以用记事本打开*/fp=fopen(filename,"w");if(fp==NULL)
printf("\\n***不能建立或打开文件%s!***",filename);return 0;
fprintf(fp,"%d\\n",n);for(i=0;i<n;i++)
fprintf(fp,"%s%s%s\\n",p[i].num,p[i].name,p[i].tel);fclose(fp);return 1;
抄来的
如何用C语言来编写让系统中某个服务停止或重启?
如何用C语言来编写让系统中某个服务停止或重启?
在Windows下,可以使用一系列API来完成该功能。首先,调用OpenSCManager来获得服务管理器句柄。
然后,通过服务器管理器句柄,调用OpenService来打开指定服务名称的服务句柄。
通过服务句柄,调用ControlService来进行你想要的控制,比如暂停,停止,重启等操作。
最后,记得调用CloseServiceHandle来关闭上述句柄,以释放内核资源。
如下是我从以前的的一段代码中COPY过来的一点示例,该函数是准备删除一个服务,在删除服务之前,停止该服务。
BOOL Uninstall()
if ( !IsInstalled() )
return TRUE;
SC_HANDLE hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if ( hSCM == NULL )
//MessageBox( NULL, _T( "打开服务管理器失败!" ), szServiceName, MB_OK );
return FALSE;
SC_HANDLE hService = OpenService( hSCM, szServiceName, SERVICE_STOP | DELETE );
if ( hService == NULL )
CloseServiceHandle( hSCM );
MessageBox( NULL, _T( "服务不存在!" ), szServiceName, MB_OK );
return FALSE;
SERVICE_STATUS status;
ControlService( hService, SERVICE_CONTROL_STOP, &status );
BOOL bDelete = DeleteService( hService );
CloseServiceHandle( hService );
CloseServiceHandle( hSCM );
if ( bDelete )
MessageBox( NULL, _T( "删除服务成功!" ), szServiceName, MB_OK );
return TRUE;
MessageBox( NULL, _T( "删除服务失败!" ), szServiceName, MB_OK );
//LogEvent(_T("Service could not be deleted"));
return FALSE;
参考技术A 调用API函数OpenSCManager()和连接SCM(服务控制管理器)
调用API函数OpenService()打开服务,有2个参数,一个为服务名,一个为执行权限;返回服务句柄
启动服务StartService();第一个参数就是服务句柄
停止服务ControlService()和上面的一样
QueryServiceStatus()查询服务当前状态,这个函数填充一个SERVICE_STATUS类型结构,获取服务当前的一些信息
以上是关于c语言编写一个通讯录系统 用简单一点的c😊的主要内容,如果未能解决你的问题,请参考以下文章