pta編譯電話簿排序
① 求c語言編寫電話薄實現添加刪除修改就可以 最好有圖形菜單,沒有也可以
聲明: 非原創
#include "stdio.h" /*標准輸入輸出函數庫*/
#include "stdlib.h" /*標准函數庫*/
#include "string.h" /*字元串函數庫*/
#include "conio.h" /*屏幕操作函數庫*/
#define HEADER1 " ---------------------------TELEPHONE BOOK---------------------------\n"
#define HEADER2 " | num | name | phonenumber | address | \n"
#define HEADER3 " |--------------|------------|-----------------|---------------------| \n"
#define FORMAT " | %-10s| %-10s| %-15s |%-20s | \n"
#define DATA p->num,p->name,p->phonenum,p->address
#define END " ---------------------------------------------------------------------\n"
#define N 100
int saveflag=0; /*是否需要存檔的標志變數*/
/*定義與電話簿有關的數據結構*/
typedef struct telebook /*標記為telebook*/
{
char num[4]; /*編號*/
char name[10]; /*姓名*/
char phonenum[15]; /*電話號碼*/
char address[20]; /*地址*/
}TELEBOOK;
void menu() /*主菜單*/
{
system("cls"); /*調用DOS命令,清屏.與clrscr()功能相同*/
textcolor(13); /*在文本模式中選擇新的字元顏色*/
gotoxy(10,5); /*在文本窗口中設置游標*/
cprintf(" The telephone-book Management System \n");
gotoxy(10,8);
cprintf(" *************************Menu********************************\n");
gotoxy(10,9);
cprintf(" * 1 input record 2 display record *\n");
gotoxy(10,10);
cprintf(" * 3 delete record 4 search record *\n");
gotoxy(10,11);
cprintf(" * 5 modify record 6 insert record *\n");
gotoxy(10,12);
cprintf(" * 7 sort record 8 save record *\n");
gotoxy(10,13);
cprintf(" * 0 quit system *\n");
gotoxy(10,14);
cprintf(" *************************************************************\n");
/*cprintf()送格式化輸出至文本窗口屏幕中*/
}
/*格式化輸出表頭*/
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
/*格式化輸出表中數據*/
void printdata(TELEBOOK pp)
{
TELEBOOK* p;
p=&pp;
printf(FORMAT,DATA);
}
/*顯示數組temp[]中存儲的電話簿記錄,內容為telebook結構中定義的內容*/
void Disp(TELEBOOK temp[],int n)
{
int i;
if(n==0) /*表示沒有電話簿記錄*/
{
printf("\n=====>Not telephone record!\n");
getchar();
return;
}
printf("\n\n");
printheader(); /*輸出表格頭部*/
i=0;
while(i<n) /*逐條輸出數組中存儲的電話簿記錄*/
{
printdata(temp[i]);
i++;
printf(HEADER3);
}
getchar();
}
void Wrong() /*輸出按鍵錯誤信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}
void Nofind() /*輸出未查找此記錄的信息*/
{
printf("\n=====>Not find this telephone record!\n");
}
/*************************************************************
作用:用於定位數組中符合要求的記錄,並返回保存該記錄的數組元素下標值
參數:findmess[]保存要查找的具體內容; nameorphonenum[]保存按什麼在數組中查找;
**************************************************************/
int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[])
{
int i=0;
if(strcmp(nameorphonenum,"phonenum")==0) /*按電話號碼查詢*/
{
while(i<n)
{
if(strcmp(temp[i].phonenum,findmess)==0) /*若找到findmess值的電話號碼*/
return i;
i++;
}
}
else if(strcmp(nameorphonenum,"name")==0) /*按姓名查詢*/
{
while(i<n)
{
if(strcmp(temp[i].name,findmess)==0) /*若找到findmess值的姓名*/
return i;
i++;
}
}
return -1; /*若未找到,返回一個整數-1*/
}
/*輸入字元串,並進行長度驗證(長度<lens)*/
void stringinput(char *t,int lens,char *notice)
{
char n[255];
do{
printf(notice); /*顯示提示信息*/
scanf("%s",n); /*輸入字元串*/
if(strlen(n)>lens) printf("\n exceed the required length! \n");
/*進行長度校驗,超過lens值重新輸入*/
}while(strlen(n)>lens);
strcpy(t,n); /*將輸入的字元串拷貝到字元串t中*/
}
/*增加電話簿記錄*/
int Add(TELEBOOK temp[],int n)
{
char ch,num[10];
int i,flag=0;
system("cls");
Disp(temp,n); /*先列印出已有的電話簿信息*/
while(1) /*一次可輸入多條記錄,直至輸入編號為0的記錄才結束添加操作*/
{
while(1) /*輸入記錄編號,保證該編號沒有被使用,若輸入編號為0,則退出添加記錄操作*/
{
stringinput(num,10,"input number(press '0'return menu):"); /*格式化輸入編號並檢驗*/
flag=0;
if(strcmp(num,"0")==0) /*輸入為0,則退出添加操作,返回主界面*/
{return n;}
i=0;
while(i<n) /*查詢該編號是否已經存在,若存在則要求重新輸入一個未被佔用的編號*/
{
if(strcmp(temp[i].num,num)==0)
{
flag=1;
break;
}
i++;
}
if(flag==1) /*提示用戶是否重新輸入*/
{ getchar();
printf("==>The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return n;
}
else
{break;}
}
strcpy(temp[n].num,num); /*將字元串num拷貝到temp[n].num中*/
stringinput(temp[n].name,15,"Name:");
stringinput(temp[n].phonenum,15,"Telephone:");
stringinput(temp[n].address,15,"Adress:");
saveflag=1;
n++;
}
return n;
}
/*按編號或姓名,查詢電話簿記錄*/
void Qur(TELEBOOK temp[],int n)
{
int select; /*1:按姓名查,2:按電話號碼查,其他:返回主界面(菜單)*/
char searchinput[20]; /*保存用戶輸入的查詢內容*/
int p=0;
if(n<=0) /*若數組為空*/
{
system("cls");
printf("\n=====>No telephone record!\n");
getchar();
return;
}
system("cls");
printf("\n =====>1 Search by name =====>2 Search by telephone number\n");
printf(" please choice[1,2]:");
scanf("%d",&select);
if(select==1) /*按姓名查詢*/
{
stringinput(searchinput,10,"input the existing name:");
p=Locate(temp,n,searchinput,"name");
/*在數組temp中查找編號為searchinput值的元素,並返回該數組元素的下標值*/
if(p!=-1) /*若找到該記錄*/
{
printheader();
printdata(temp[p]);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else if(select==2) /*按電話號碼查詢*/
{
stringinput(searchinput,15,"input the existing telephone number:");
p=Locate(temp,n,searchinput,"phonenum");
if(p!=-1)
{
printheader();
printdata(temp[p]);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
/*刪除電話簿記錄:先找到保存該記錄的數組元素的下標值,然後在數組中刪除該數組元素*/
int Del(TELEBOOK temp[],int n)
{
int sel;
char findmess[20];
int p=0,i=0;
if(n<=0)
{ system("cls");
printf("\n=====>No telephone record!\n");
getchar();
return n;
}
system("cls");
Disp(temp,n);
printf("\n =====>1 Delete by name =====>2 Delete by telephone number\n");
printf(" please choice[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"input the existing name:");
p=Locate(temp,n,findmess,"name");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++) /*刪除此記錄,後面記錄向前移*/
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].phonenum,temp[i].phonenum);
strcpy(temp[i-1].address,temp[i].address);
}
printf("\n==>delete success!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else if(sel==2) /*先按電話號碼查詢到該記錄所在的數組元素的下標值*/
{
stringinput(findmess,15,"input the existing telephone number:");
p=Locate(temp,n,findmess,"phonenum");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++) /*刪除此記錄,後面記錄向前移*/
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].phonenum,temp[i].phonenum);
strcpy(temp[i-1].address,temp[i].address);
}
printf("\n=====>delete success!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
return n;
}
/*修改電話簿記錄。先按輸入的聯系人姓名查詢到該記錄,
然後提示用戶修改該記錄編號之外的值,編號不能修改*/
void Modify(TELEBOOK temp[],int n)
{
char findmess[20];
int p=0;
if(n<=0)
{ system("cls");
printf("\n=====>No telephone number record!\n");
getchar();
return ;
}
system("cls");
printf("modify telephone book recorder");
Disp(temp,n);
stringinput(findmess,10,"input the existing name:"); /*輸入並檢驗該姓名*/
p=Locate(temp,n,findmess,"name"); /*查詢到該數組元素,並返回下標值*/
if(p!=-1) /*若p!=-1,表明已經找到該數組元素*/
{
printf("Number:%s,\n",temp[p].num);
printf("Name:%s,",temp[p].name);
stringinput(temp[p].name,15,"input new name:");
printf("Name:%s,",temp[p].phonenum);
stringinput(temp[p].phonenum,15,"input new telephone:");
printf("Name:%s,",temp[p].address);
stringinput(temp[p].address,30,"input new address:");
printf("\n=====>modify success!\n");
getchar();
Disp(temp,n);
getchar();
saveflag=1;
}
else
{Nofind();
getchar();
}
return ;
}
/*插入記錄:按編號查詢到要插入的數組元素的位置,然後在該記錄編號之後插入一個新數組元素。*/
int Insert(TELEBOOK temp[],int n)
{
char ch,num[10],s[10]; /*s[]保存插入點位置之前的記錄編號,num[]保存輸入的新記錄的編號*/
TELEBOOK newinfo;
int flag=0,i=0,kkk=0;
system("cls");
Disp(temp,n);
while(1)
{ stringinput(s,10,"please input insert location after the Number:");
flag=0;i=0;
while(i<n) /*查詢該編號是否存在,flag=1表示該編號存在*/
{
if(strcmp(temp[i].num,s)==0) {kkk=i;flag=1;break;}
i++;
}
if(flag==1)
break; /*若編號存在,則進行插入之前的新記錄輸入操作*/
else
{ getchar();
printf("\n=====>The number %s is not existing,try again?(y/n):",s);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
}
/*以下新記錄的輸入操作與Add()相同*/
while(1)
{ stringinput(num,10,"input new Number:");
i=0;flag=0;
while(i<n) /*查詢該編號是否存在,flag=1表示該編號存在*/
{
if(strcmp(temp[i].num,num)==0) {flag=1;break;}
i++;
}
if(flag==1)
{
getchar();
printf("\n=====>Sorry,The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
else
break;
}
strcpy(newinfo.num,num); /*將字元串num拷貝到newinfo.num中*/
stringinput(newinfo.name,15,"Name:");
stringinput(newinfo.phonenum,15,"Telephone:");
stringinput(newinfo.address,15,"Adress:");
saveflag=1; /*在main()有對該全局變數的判斷,若為1,則進行存檔操作*/
for(i=n-1;i>kkk;i--) /*從最後一個組織元素開始往向移一個元素位置*/
{
strcpy(temp[i+1].num,temp[i].num);
strcpy(temp[i+1].name,temp[i].name);
strcpy(temp[i+1].phonenum,temp[i].phonenum);
strcpy(temp[i+1].address,temp[i].address);
}
strcpy(temp[kkk+1].num,newinfo.num); /*在kkk的元素位置後插入新記錄*/
strcpy(temp[kkk+1].name,newinfo.name);
strcpy(temp[kkk+1].phonenum,newinfo.phonenum);
strcpy(temp[kkk+1].address,newinfo.address);
n++;
Disp(temp,n);
printf("\n\n");
getchar();
return n;
}
/*利用選擇排序法實現數組的按記錄編號或姓名的升序排序*/
void SelectSort(TELEBOOK temp[],int n)
{
int i=0,j=0,flag=0,indexmin,select;
char charflag[10];
TELEBOOK newinfo;
if(n<=0)
{ system("cls");
printf("\n=====>Not telephone record!\n");
getchar();
return ;
}
system("cls");
Disp(temp,n); /*顯示排序前的所有記錄*/
printf(" ==>1 SORT BY NUMBER ==>2 SORT BY NAME\n");
printf(" please choice[1,2]:");
scanf("%d",&select);
if(select==1) /*按記錄編號排序*/
{
for(i=0;i<n-1;i++)
{
flag=32767;indexmin=0;
for(j=i;j<n;j++)
{ if(atoi(temp[j].num)<flag)
{ flag=atoi(temp[j].num);
indexmin=j;
}
}
strcpy(newinfo.num,temp[i].num); /*利用結構變數newinfo實現數組元素的交換*/
strcpy(newinfo.name,temp[i].name);
strcpy(newinfo.phonenum,temp[i].phonenum);
strcpy(newinfo.address,temp[i].address);
strcpy(temp[i].num,temp[indexmin].num);
strcpy(temp[i].name,temp[indexmin].name);
strcpy(temp[i].phonenum,temp[indexmin].phonenum);
strcpy(temp[i].address,temp[indexmin].address);
strcpy(temp[indexmin].num,newinfo.num);
strcpy(temp[indexmin].name,newinfo.name);
strcpy(temp[indexmin].phonenum,newinfo.phonenum);
strcpy(temp[indexmin].address,newinfo.address);
}
Disp(temp,n); /*顯示排序後的所有記錄*/
saveflag=1;
printf("\n =====>sort complete!\n");
getchar();
return;
}
else if(select==2)
{
for(i=0;i<n-1;i++)
{
charflag[0]=255;indexmin=0;
for(j=i;j<n;j++)
{ if(strcmp(temp[j].name,charflag)>0)
{ charflag[0]=temp[j].name;
indexmin=j;
}
}
strcpy(newinfo.num,temp[i].num); /*利用結構變數newinfo實現數組元素的交換*/
strcpy(newinfo.name,temp[i].name);
strcpy(newinfo.phonenum,temp[i].phonenum);
strcpy(newinfo.address,temp[i].address);
strcpy(temp[i].num,temp[indexmin].num);
strcpy(temp[i].name,temp[indexmin].name);
strcpy(temp[i].phonenum,temp[indexmin].phonenum);
strcpy(temp[i].address,temp[indexmin].address);
strcpy(temp[indexmin].num,newinfo.num);
strcpy(temp[indexmin].name,newinfo.name);
strcpy(temp[indexmin].phonenum,newinfo.phonenum);
strcpy(temp[indexmin].address,newinfo.address);
}
Disp(temp,n); /*顯示排序後的所有記錄*/
saveflag=1;
printf("\n =====>sort complete!\n");
getchar();
return;
}
else
{Wrong();
getchar();
getchar();
return;}
}
/*數據存檔,若用戶沒有專門進行此操作且對數據有修改,在退出系統時, 會提示用戶存檔*/
void Save(TELEBOOK temp[],int n)
{
FILE* fp;
int i=0;
fp=fopen("c:\\telephon","w");/*以只寫方式打開文本文件*/
if(fp==NULL) /*打開文件失敗*/
{
printf("\n=====>open file error!\n");
getchar();
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1)/*每次寫一條記錄或一個結構數組元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n=====>save file complete,total saved's record number is:%d\n",i);
getchar();
saveflag=0;
}
else
{system("cls");
printf("the current link is empty,no telephone record is saved!\n");
getchar();
}
fclose(fp); /*關閉此文件*/
}
void main()
{
TELEBOOK tele[N]; /*定義TELEBOOK結構體*/
FILE *fp; /*文件指針*/
int select; /*保存選擇結果變數*/
char ch; /*保存(y,Y,n,N)*/
int count=0; /*保存文件中的記錄條數(或元素個數)*/
fp=fopen("C:\\telephon","a+");
/*以追加方式打開文本文件c:\telephon,可讀可寫,若此文件不存在,會創建此文件*/
if(fp==NULL)
{
printf("\n=====>can not open file!\n");
exit(0);
}
while(!feof(fp))
{
if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1) /*一次從文件中讀取一條電話簿記錄*/
count++;
}
fclose(fp); /*關閉文件*/
printf("\n==>open file sucess,the total records number is : %d.\n",count);
getchar();
menu();
while(1)
{
system("cls");
menu();
printf("\n Please Enter your choice(0~8):"); /*顯示提示信息*/
scanf("%d",&select);
if(select==0)
{
if(saveflag==1) /*若對數組的數據有修改且未進行存檔操作,則此標志為1*/
{ getchar();
printf("\n==>Whether save the modified record to file?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(tele,count);
}
printf("\n===>thank you for useness!");
getchar();
break;
}
switch(select)
{
case 1:count=Add(tele,count);break; /*增加電話簿記錄*/
case 2:system("cls");Disp(tele,count);break; /*顯示電話簿記錄*/
case 3:count=Del(tele,count);break; /*刪除電話簿記錄*/
case 4:Qur(tele,count);break; /*查詢電話簿記錄*/
case 5:Modify(tele,count);break; /*修改電話簿記錄*/
case 6:count=Insert(tele,count);break; /*插入電話簿記錄*/
case 7:SelectSort(tele,count);break; /*排序電話簿記錄*/
case 8:Save(tele,count);break; /*保存電話簿記錄*/
default: Wrong();getchar();break; /*按鍵有誤,必須為數值0-9*/
}
}
}
② 九,電話簿管理系統 存儲的數據包括:姓名、班級、電話號碼和E-mail地址等。程序要求具有如下功能:
#我曾經份實驗報告想要前三功能都需改提示信息行
#include <stdio.h>
#define NUM 50
typedef struct _stu //定義結構體類型
{
char no[11]; //號
char name[10]; //姓名
char birthday[11]; //期
char sex[3]; //性別
char nation[10]; //民族
char department[20]; //院系
char major[20]; //專業
char province[20]; //省份
int score; //卷面績
int add; //加
int total; //總=卷面績+加
}STU;
int menu();
int enter(STU s[]);
void print(STU s[], int n);
void search(STU s[], int n);
int insert(STU s[], int n);
int del(STU s[], int n);
void save(STU s[], int n);
int load(STU s[]);
void sort(STU s[], int n);
void modify(STU st[], int n);
void printone(STU s);
void back();
void reinput();
void enterone(STU *s);
void stu(const STU *a, STU *b);
int main(){
STU stu[NUM];
int num=0;
while(1){
switch(menu()){
case 1: num += enter(stu); break;
case 2: search(stu,num); break;
case 3: num += insert(stu,num); break;
case 4: num -= del(stu, num); break;
case 5: save(stu, num); break;
case 6: num=load(stu); break;
case 7: sort(stu, num); break;
case 8: modify(stu, num); break;
case 9: print(stu, num); break;
case 10: return 0;
default: printf(" >>> Unknown Command!!!\n");
}
}
return 0;
}
int menu(){
int in = -1;
printf("\n\n*****************************************************************\n\n"
" 檔案庫\n\n"
"菜單:\n\n"
" 1.輸入記錄 2.查找記錄 3.插入記錄 4.刪除記錄\n\n"
" 5.保存數據 6.載入數據 7.排序記錄 8.修改記錄\n\n"
" 9.列印數據 10.退程序\n\n"
"*****************************************************************\n"
"Please input command: ");
scanf("%2d",&in);
while(getchar()!='\n');
return in;
}
int enter(STU s[]){
int n, f, ok=0, i;
printf("輸入要添加記錄數目: ");
do{
f=scanf("%2d", &n);
if(f==0 || n>=NUM){
if(n>=NUM) printf("能存儲%d條記錄",NUM);
reinput();
}else ok=1;
}while(!ok);
for(i=0; i<n; i++){
printf("始輸入第%d位信息\n\n",i+1);
enterone(s+i);
printf("第%d位信息輸入完畢\n\n");
}
printf("全部輸入完畢\n\n");
return n;
}
void print(STU s[], int n){
int i;
printf("\n所檔案\n");
for(i=0; i<n; i++){
printf("\n序號 %d :\n",i+1);
printone(s[i]);
printf(">>> 按Enter鍵顯示\n");
getchar();
}
printf("已列印所條目\n");
back();
}
void search(STU s[],int n){
char name[10];
int i,j=0;
printf("輸入要查找姓名(目前僅提供姓名檢索)\n ");
while(scanf("%9s",name)==0) reinput();
while(getchar()!='\n');
for(i=0;i<n;i++){
if(!strcmp(s[i].name, name)){
printone(s[i]);
j++;
}
}
if(!j) printf("未找相關記錄\n");
back();
}
int insert(STU s[], int n){
STU in,temp;
int i,j;
char no[11];
if(n>=NUM){
printf("容量足插入新記錄\n");
back();
return 0;
}
enterone(&in);
printf("輸入完畢\n現輸入某記錄號新記錄插指定記錄前:\n");
while(scanf("%10s", no)==0) reinput();
for(i=0;i<n;i++){
if(!strcmp(s[i].no, no)){
for(j=n-1;j>=i;j--){
stu(s+j,s+j+1);
}
stu(&in,s+i);
printf("新記錄已插入指定位置\n");
back();
return 1;
}
}
printf("沒找與指定號匹配記錄已自新記錄添加末尾\n");
stu(&in,s+n);
back();
return 1;
}
int del(STU s[], int n){
char no[11];
int i,j;
printf("輸入要刪除記錄號:\n");
while(scanf("%10s",&no)==0) reinput();
for(i=0;i<n;i++){
if(!strcmp(s[i].no, no)){
for(j=i;j<n;j++){
stu(s+j+1,s+j);
}
printf("記錄已刪除\n");
back();
return 1;
}
}
printf("沒找指定記錄\n");
back();
return 0;
}
void save(STU s[], int n){
char nm[50];
FILE* f;
int i;
printf("輸入文件路徑名稱: \n");
while(scanf("%49s",nm)==0) reinput();
if((f=fopen(nm,"a"))==NULL){
if((f=fopen(nm,"w"))==NULL){
printf("文件打或創建失敗");
back();
return;
}
}
fprintf(f,"%d\n",n);
for(i=0; i<n; i++){
fprintf(f,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n%d\n%d\n",
s[i].no, s[i].name, s[i].birthday, s[i].sex, s[i].nation,
s[i].department,s[i].major,s[i].province,s[i].score,s[i].add,s[i].total);
}
fclose(f);
printf("文件已保存: %s\n",nm);
}
int load(STU s[]){
char nm[50];
FILE* f;
int i, n=0;
printf("輸入文件路徑名稱: \n");
while(scanf("%49s",nm)==0) reinput();
if((f=fopen(nm,"r"))==NULL){
printf("文件打失敗");
back();
return 0;
}
fscanf(f,"%d",&n);
if(n>NUM) n=NUM;
for(i=0; i<n; i++){
fscanf(f,"%s %s %s %s %s %s %s %s %d %d %d",
&s[i].no, &s[i].name, &s[i].birthday, &s[i].sex, &s[i].nation,
&s[i].department,&s[i].major,&s[i].province,&s[i].score,&s[i].add,&s[i].total);
}
fclose(f);
printf("記錄載入完畢\n");
back();
return n;
}
void sort(STU s[], int n){
STU temp;
int i, j;
for(i=0; i<n-1; i++)
for(j=0;j<n-1-i;j++)
if(s[j].total<s[j+1].total){
stu(s+j+1,&temp);
stu(s+j,s+j+1);
stu(&temp,s+j);
}
printf("已按總高低進行排序\n");
back();
}
void modify(STU st[], int n){
STU *s=NULL;
char no[11];
int i,j, c;
char item[10][10]={"號","姓名","期","性別","民族","院系",
"專業","省份","卷面績","加"};
printf("輸入要修改記錄號:\n");
while(scanf("%10s",&no)==0) reinput();
while(getchar()!='\n');
for(i=0;i<n;i++){
if(!strcmp(st[i].no, no)){
s=st+i;
for(j=0;j<10;j++){
printf("修改 %s ?(確定輸入』y『)\n",item[j]);
if((c=getchar())=='y' || c=='Y')
switch(j){
case 0:
while(scanf("%10s",s->no)==0) reinput(); break;
case 1:
while(scanf("%9s",s->name)==0) reinput(); break;
case 2:
while(scanf("%10s",s->birthday)==0) reinput(); break;
case 3:
while(scanf("%2s",s->sex)==0) reinput(); break;
case 4:
while(scanf("%9s",s->nation)==0) reinput(); break;
case 5:
while(scanf("%19s",s->department)==0) reinput(); break;
case 6:
while(scanf("%19s",s->major)==0) reinput(); break;
case 7:
while(scanf("%19s",s->province)==0) reinput(); break;
case 8:
while(scanf("%d",&(s->score))==0 || s->score<0) reinput(); break;
case 9:
while(scanf("%d",&(s->add))==0 ) reinput(); break;
}
while(getchar()!='\n');
}
s->total=s->score+s->add;
printf("修改完\n");
back();
return;
}
}
printf("沒找指定記錄\n");
back();
}
void printone(STU s){
printf(" 號: %s\n"
" 姓名: %s\n"
" 期: %s\n"
" 性別: %s\n"
" 民族: %s\n"
" 院系: %s\n"
" 專業: %s\n"
" 省份: %s\n"
" 卷面績: %d\n"
" 加: %d\n"
" 總: %d\n",
s.no, s.name,s.birthday,s.sex,s.nation,
s.department,s.major,s.province,s.score,s.add,s.total);
}
void back(){
printf("\n按Enter鍵返主菜單\n");
getchar();
}
void reinput(){
printf("輸入合重新輸入:\n ");
while(getchar()!='\n');
}
void enterone(STU *s){
printf("號:\n ");
while(scanf("%10s",s->no)==0) reinput();
while(getchar()!='\n');
printf("姓名:\n ");
while(scanf("%9s",s->name)==0) reinput();
while(getchar()!='\n');
printf("期(.月.):\n ");
while(scanf("%10s",s->birthday)==0) reinput();
while(getchar()!='\n');
printf("性別:\n ");
while(scanf("%2s",s->sex)==0) reinput();
while(getchar()!='\n');
printf("民族:\n ");
while(scanf("%9s",s->nation)==0) reinput();
while(getchar()!='\n');
printf("院系:\n ");
while(scanf("%19s",s->department)==0) reinput();
while(getchar()!='\n');
printf("專業:\n ");
while(scanf("%19s",s->major)==0) reinput();
while(getchar()!='\n');
printf("省份:\n ");
while(scanf("%19s",s->province)==0) reinput();
while(getchar()!='\n');
printf("卷面績:\n ");
while(scanf("%d",&(s->score))==0 || s->score<0) reinput();
while(getchar()!='\n');
printf("加:\n ");
while(scanf("%d",&(s->add))==0 ) reinput();
while(getchar()!='\n');
s->total=s->score+s->add;
}
void stu(const STU *a, STU *b){
strcpy(b->no, a->no);
strcpy(b->name, a->name);
strcpy(b->birthday, a->birthday);
strcpy(b->sex, a->sex);
strcpy(b->nation, a->nation);
strcpy(b->department, a->department);
strcpy(b->major, a->major);
strcpy(b->province, a->province);
b->score=a->score;
b->add=a->add;
b->total=a->total;
}
③ iPhone電話簿備份還原後無法按開頭英文排序
電話簿不要用91備份那麼麻煩了,刷完機後直接把在這個文件復制出來就可以了,以後刷完直接再放回去,就可以了
文件路徑 privata/var/mobile/library/addressbook
這樣子就沒有那麼多麻煩的問題了,91用了會直接導致手機死機,老麻煩的
④ WPS表格 做了個電話簿 要按姓氏首字母排序 怎麼弄 ps後面的電話號碼也要一起動才行啊 不能只動姓那列
數據——排序——選a列——排序依據選"數值"——升序——確定 這種排序結果都是按照漢語拼音第一個字母的英文順序,「尹」是一定在「王」後面的。原理是小寫的a在excel中的數值是97,b是98,類推。。w是119,y是121 。 如果你想要按照筆畫甚至筆順等特殊要求排...
⑤ 求一C語言編寫的程序要求如下: 1.電話簿管理系統(用到結構體和指針) 2.結構體內包括姓名和電話
請根據需要進行適當修改
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
structrecord
{
charid[10];
charname[20];
charphone[20];
}Contacts[500];
intnum=0;//外部變數num為文件中的紀錄數
FILE*fp;
voidmainmenu();//主菜單
voidnewrecord();//新添紀錄
voidsearchmenu();//查詢菜單
voidsearchbyid();//按編號查詢
voidsearchbyname();//按姓名查詢
voidsearchbyphone();//按電話查詢
voiddeletemenu();//刪除菜單
voiddeleteall();//刪除所有
voiddeleteone();//刪除單個
voidshowall();//顯示所有
voidreadfromfile();//讀取文件
voidwritetofile();//寫入文件
voiddeletebyid();//按編號刪除
voiddeletebyname();//按姓名刪除
voidlistbyid();//按編號排序
voidlistbyname();//按姓名排序
voidlistmenu();//排序菜單
voidmain()
{
readfromfile();
while(1)
{
mainmenu();
}
}
voidreadfromfile()//從文件導入
{
if((fp=fopen(".\Contacts.dat","rb"))==NULL)
{
printf(" 通訊錄文件不存在");
if((fp=fopen(".\Contacts.dat","wb"))==NULL)
{
printf(" 建立失敗");
exit(0);
}
else
{
printf(" 通訊錄文件已建立");
printf(" 按任意鍵進入主菜單");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);/*文件位置指針移動到文件末尾*/
if(ftell(fp)>0)/*文件不為空*/
{
rewind(fp);/*文件位置指針移動到文件開始位置*/
for(num=0;!feof(fp)&&fread(&Contacts[num],sizeof(structrecord),1,fp);num++);
printf(" 文件導入成功");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
printf(" 文件導入成功");
printf(" 通訊錄文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
voidmainmenu()//主菜單
{
charchoic;
system("cls");
printf(" ********************主菜單********************");
printf(" ***********1-新添紀錄2-查詢菜單************");
printf(" ***********3-刪除菜單4-記錄排序************");
printf(" ***********5-保存退出6-不保存退出***********");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':newrecord();break;
case'2':searchmenu();break;
case'3':deletemenu();break;
case'4':listmenu();break;
case'5':writetofile();break;
case'6':exit(0);
default:mainmenu();
}
}
voidsearchmenu()//查詢菜單
{
charchoic;
system("cls");
printf(" *******************查詢菜單*******************");
printf(" **********1-顯示所有2-按編號查詢************");
printf(" **********3-按姓名查詢4-按電話查詢************");
printf(" **********5-返回主菜單************");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':showall();break;
case'2':searchbyid();break;
case'3':searchbyname();break;
case'4':searchbyphone();break;
case'5':mainmenu();break;
}
}
voiddeletemenu()//刪除菜單
{
charchoic;
if(num==0)
{
printf(" 對不起,文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf(" *******************刪除菜單*******************");
printf(" ***********1-刪除所有2-刪除單個***********");
printf(" ***********3-返回主菜單***********");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':deleteall();break;
case'2':deleteone();break;
case'3':mainmenu();break;
default:mainmenu();break;
}
}
voiddeleteall()//刪除所有
{
printf(" 確認刪除?(y/n)");
if(getch()=='y')
{
fclose(fp);
if((fp=fopen("Contacts.bin","wb"))==NULL)
{
printf(" 不能打開文件,刪除失敗");
readfromfile();
}
num=0;
printf(" 紀錄已刪除,按任意鍵返回主菜單");
getch();
return;
}
else
return;
}
voiddeletebyname()//按姓名刪除
{
inta=0;
intfindmark=0;
intj;
intdeletemark=0;
inti;
charname[20];
printf(" 請輸入要刪除聯系人的姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if(strcmp(Contacts[i].name,name)==NULL)
{
printf(" 以下是您要刪除的聯系人紀錄:");
findmark++;
printf(" ________________________________");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ________________________________");
printf(" 是否刪除?(y/n)");
if(getch()=='y')
{
for(j=i;j<num-1;j++)/*紀錄移動,從Contacts數組中刪除之*/
Contacts[j]=Contacts[j+1];
num--;
deletemark++;
printf(" 刪除成功");
if((i+1)<num)
{
printf(" 是否繼續刪除相同姓名的聯系人信息?(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
}
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf(" 是否繼續刪除相同姓名的聯系人信息?(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if((deletemark==0)&&(findmark==0))
{
printf(" 沒有該聯系人的紀錄");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
return;
}
elseif(findmark!=0)
{
printf(" 沒有重名信息");
printf(" 沒有該聯系人的紀錄");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
return;
}
}
voiddeletebyid()//按編號刪除
{
inti,j;
intdeletemark=0;
charid[20];
printf(" 請輸入要刪除聯系人編號:");
scanf("%s",id);
if(num==0)
{
printf(" 對不起,文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
for(i=0;i<num;i++)
{
if(strcmp(Contacts[i].id,id)==NULL)
{
printf(" 以下是您要刪除的聯系人紀錄:");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" 是否刪除?(y/n)");
if(getch()=='y')
{
for(j=i;j<num-1;j++)/*紀錄移動,從Contacts數組中刪除之*/
Contacts[j]=Contacts[j+1];
num--;
deletemark++;
printf(" 刪除成功");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
}
else
return;
}
continue;
}
if(deletemark==0)
{
printf(" 沒有該聯系人的紀錄");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
}
}
voidnewrecord()//添加紀錄
{
printf(" ****************請輸入聯系人信息**************** ");
printf(" 輸入編號:");
scanf("%s",&Contacts[num].id);
printf(" 輸入姓名:");
scanf("%s",&Contacts[num].name);
printf(" 輸入電話號碼:");
scanf("%s",&Contacts[num].phone);
num++;
printf(" 是否繼續添加?(Y/N):");
if(getch()=='y')
newrecord();
return;
}
voidshowall()//顯示所有
{
inti;
system("cls");
if(num!=0)
{
printf(" ***************以下為通訊錄所有信息************");
for(i=0;i<num;i++)
{
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ");
if(i+1<num)
{
printf(" __________________________");
system("pause");
}
}
printf(" ************************************************");
}
else
printf(" 通訊錄中無任何紀錄");
printf(" 按任意鍵返回主菜單:");
getch();
return;
}
//按電話查詢
voidsearchbyphone()
{
intmark=0;
inti;
inta=0;
printf(" ******************按電話查找******************");
charphone[10];
printf(" 請輸入編號:");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if(strcmp(Contacts[i].phone,phone)==0)
{
printf(" **************以下是您查找的聯系人信息**********");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ************************************************");
printf(" 按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf(" 沒有改聯系人的信息");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
voidsearchbyname()//按姓名查詢
{
intmark=0;
inti;
inta=0;
printf(" *****************按姓名查找*******************");
charname[20];
printf(" 請輸入姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if(strcmp(Contacts[i].name,name)==0)
{
printf(" *************以下是您查找的聯系人信息***********");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ************************************************");
mark++;
if((i+1)<num)
{
printf(" 是否繼續查找相同名字的聯系人信息:(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
else
return;
}
else
{
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
}
if(mark!=0)
{
printf(" 沒有相同姓名的聯系人紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
else
{
printf(" 沒有相同姓名的聯系人紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
voidsearchbyid()//按編號查詢
{
intmark=0;
inti;
inta=0;
printf(" ******************按編號查找****************** ");
charid[10];
printf(" 請輸入編號:");
scanf("%s",id);
for(i=0;i<num;i++)
{
if(strcmp(Contacts[i].id,id)==0)
{
printf(" **************以下是您查找的聯系人信息**********");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ************************************************");
printf(" 按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf(" 沒有改聯系人的信息");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
voidwritetofile()//寫入文件
{
inti;
if((fp=fopen(".\Contacts.dat","wb"))==NULL)
{
printf(" 文件打開失敗");
}
for(i=0;i<num;i++)
{
if(fwrite(&Contacts[i],sizeof(structrecord),1,fp)!=1)
{
printf(" 寫入文件錯誤! ");
}
}
fclose(fp);
printf(" 通訊錄文件已保存");
printf(" 按任意鍵退出程序 ");
exit(0);
}
voiddeleteone()//刪除單個
{
charchoic;
printf(" 1-按編號刪除2-按姓名刪除");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':deletebyid();break;
case'2':deletebyname();break;
}
}
voidlistbyname()//按姓名排序
{
inti,j;
structrecordtmp;
for(i=1;i<num;i++)
{
if(strcmp(Contacts[i].name,Contacts[i-1].name)<0)
{
tmp=Contacts[i];
j=i-1;
do
{
Contacts[j+1]=Contacts[j];
j--;
}while((strcmp(tmp.name,Contacts[j].name)<0&&j>=0));
Contacts[j+1]=tmp;
}
}
printf(" 排序成功,是否顯示?(y/n)");
if(getch()=='y')
showall();
return;
}
voidlistbyid()//按編號排序
{
inti,j;
structrecordtmp;
for(i=1;i<num;i++)
{
if(strcmp(Contacts[i].id,Contacts[i-1].id)<0)
{
tmp=Contacts[i];
j=i-1;
do
{
Contacts[j+1]=Contacts[j];
j--;
}while((strcmp(tmp.id,Contacts[j].id)<0)&&j>=0);
Contacts[j+1]=tmp;
}
}
printf(" 排序成功,是否顯示?(y/n)");
if(getch()=='y')
showall();
return;
}
voidlistmenu()//排序菜單
{
charchoic;
if(num==0)
{
printf(" 對不起,文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf(" *******************排序菜單*******************");
printf(" **********1-按編號排序2-按姓名排序**********");
printf(" **********3-返回主菜單**********");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':listbyid();break;
case'2':listbyname();break;
case'3':mainmenu();break;
default:mainmenu();break;
}
}
⑥ PTA中C語言編程問題(答案沒有給我滿分,請幫我指出一下我程序的錯誤)
#include<stdio.h>
intmain()
{
intn,a[11],i,temp,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<n;j++)
for(i=0;i<n-j-1;i++)//改了下這里當i=n-1時i+1就越界了,所以i<n-j-1
if(a[i]<a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;}
for(i=0;i<n-1;i++)
printf("%d",a[i]);
printf("%d",a[i]);
return0;
}
⑦ 奧迪Q2L電話簿怎樣使用
以下內容適用於奧迪Q2L第一代車型。
調出電話簿
適用於:裝有電話的汽車
在行動電話配對後,將把行動電話的聯系人自動輸入到MMI的電話簿中。
⑧ c++編程,電話簿,要求以雙向鏈表儲存
#include<cstdio>
#include<cstdlib>
#include<cstring>
/************************************************************************/
/**通訊錄系統*/
/************************************************************************/
#definename256///名字
#definetele32///手機號
#definebirt32///生日
#definestID32///學號
typedefstructdirectory
{
charName[name];
charTele[tele];
charBirt[birt];
charStID[stID];
structdirectory*next,*prior;
}CONTACTS;
boolJ_T(charp[])///電話號碼
{
intlen=strlen(p);
if(len!=11||p[0]!='1')return0;
for(inti=1;i<len;i++)
{
if(!(p[i]>='0'&&p[i]<='9'))
return0;
}
return1;
}
boolJ_L(intyear)///平/潤年
{
return(year%4==0&&year%100!=0||year%400==0);
}
boolJ_B(charp[])///生日
{
intlen=strlen(p);
if(!(len>=8&&len<=10))return0;/**1949/1/1(8)1949/12/31(10)**/
intsum=0,Bith[3],k=0;
for(inti=0;i<len;i++)
{
if(!(p[i]>='0'&&p[i]<='9'||p[i]=='/'))///輸入合法
return0;
}
p[len]='/';
p[len+1]='