c语言编写一个通讯录系统 用简单一点的c😊
#define N 100
#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((in)(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(im){
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(in){
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;in;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;in;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;in;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(in){
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;in;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;in+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;in;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;xn;x++)
{
gets(t.num);
}
while(strcmp(t.num,"")==0);/*学号不能为空*/printf("请输入新记录的姓名:");gets(t.name);
printf("请输入新记录的电话号码:");gets(t.tel);
for(i=0;in;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;in+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;in;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;xn;x++)
int j,i,k;char c1,c2;
struct studenttemp;
printf("\n排序前的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;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;in-1;i++){
k=i;
for(j=i;jn;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;in;i++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel);}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0;in-1;i++){
k=i;
for(j=0;jn;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;in;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;in-1;i++){
k=i;
for(j=0;jn;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;in;i++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel);
}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0;in-1;i++){
k=i;
for(j=i;jn;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;in;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(allN)/*读取记录总数*/{
printf("文件记录数太多,不能读取");return 0;}
for(i=0;iall;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;in;i++)
fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel);fclose(fp);return 1;}
抄来的
C语言调试步骤
一、在keil中调试c语言程序
1、打开我们的程序,点击菜单栏右侧的start/stopdebug..按钮,进入调试模式,如下图。
2、左侧为寄存器窗口,右上方是汇编窗口,我们可以看到各个寄存器的数值和c语言对应的汇编代码,如下图。
3、点击单步执行按钮或者点击f11、f10,都可以进入单步执行模式,方便我们看程序流程和执行步骤,如下图。
4、点击菜单栏的串口按钮,我们来调试串口的输出,这里有很多对应的调试工具可供选择,如下图。
5、单步执行,我们看到各个窗口的变化,当直行到输出时,可以看到串口窗口有相应的字符输出,如下图。
6、再次点击start/stop按钮来停止调试,如下图。
二、用vs2012对C语言进行调试
1、要对编程环境左边的一条竖直的空开的地方进行点击,点击的是你要调试的相应的语句。
2、点击窗口上方的工具栏的调试界面,点击逐语句或逐过程,都没关系。
3、开始调试,在调试过程中每个调试语句都要按一次F5键,在键盘上按下,你可以看到执行的当前的语句中,左边位置的红点有个箭头。
4、在每次调试语句中,变量值发生改变时,下方的小界面都会显示出来,看是否正确。
5、不断地重复这个步骤,知道发现错误的地方为止。
6、发现错误后,停止调试,修改相应的代码,即完成此次调试。
c语言的调试记录怎么查
所谓调试(Dubug),就是跟踪程序的运行过程,从而发现程序的逻辑错误(思路错误),或者隐藏的缺陷(Bug)。
在调试的过程中,我们可以监控程序的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码。
我敢保证,每个人都会遇到逻辑错误,而且会经常遇到,初学者更是错的离谱,所以,必须掌握调试技能,没有选择的余地,没有学会调试就是没有学会编程!
本章内容:
1. 调试的概念以及调试器的选择
2. 设置断点,开始调试
3. 查看和修改变量的值
4. 单步调试(逐语句调试和逐过程调试)
5. 即时窗口的使用
6. 查看、修改运行时的内存
7. 有条件断点的设置
8. assert断言函数
9. 调试信息的输出
10. VS调试的总结以及技巧
通话记录(C语言)
#includestdio.h
int main()
{
int a[10];
char q;
int i,m=0,n=0,p=0;
long long b[10],c[10],d[10],s[10];
for(i=0;i10;i++)
{
b[i]=0;
c[i]=0;
d[i]=0;
}
for(i=0;i10;i++)
{
scanf("%d%lld",a[i],s[i]);
}
for(i=9;i=0;i--)
{
if(a[i]==0)
{
b[m++]=s[i];
}
if(a[i]==1)
{
c[n++]=s[i];
}
if(a[i]==2)
{
d[p++]=s[i];
}
}
for(i=0;i10;i++)
{
printf("%lld %lld %lld\n",b[i],c[i],d[i]);
}
return 0;
}
C++程序实现通话记录功能
#include iostream
#include stack
#define MAX_LIST_COUNT 10
using namespace std;
class CallList {
private:
stacklong long stk[3];
public:
~CallList();
void readData();
void printData();
};
CallList::~CallList() {
delete stk;
}
void CallList::readData() {
for(int i = 0; i MAX_LIST_COUNT; i++) {
int group;
long long num;
cin group num;
stk[group].push(num);
}
}
void CallList::printData() {
for(int i = 0; i MAX_LIST_COUNT; i++) {
for(int j = 0; j 3; j++) {
long long out = 0;
if(stk[j].size()) {
out = stk[j].top();
stk[j].pop();
}
cout out " ";
}
cout endl;
}
}
int main() {
CallList cl;
cl.readData();
cl.printData();
return 0;
}
tf(fp,"%d\n",n);for(i=0;in;i++)fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel);
;i++)printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel);}else if(c2=='j'||c2=='
m,p-name)==0)break;if(i==n)printf("无此人!\n");else{printf("请输入正确的学号:");do{gets(p-num);}while(strcmp(p-num,"")==0);printf("请输入正确的姓名:
;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')/*按姓名排序
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