工具:Visual C++6.0windows
說明:函數
本系統基於C語言實現班級通信錄管理系統,爲大一時學習C語言剛入門所作的課程設計。功能包括增、刪、查、改等,很是適合初學者練手。通信錄包括的我的信息有姓名、學號、性別、籍貫、政治面貌、手機號、QQ號、宿舍等。主要用到了指針、結構體、遍歷鏈表、文件讀取等知識點。工具
運行效果:oop
代碼:學習
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<windows.h> 5 typedef struct student //定義結構體 6 { 7 char name[20]; //姓名 8 char num[15]; //學號 9 char sex[10]; //性別 10 char from[20]; //籍貫 11 char political[10]; //政治面貌 12 char phone[15]; //手機號 13 char QQ[15]; //QQ號 14 char dorm[10]; //宿舍 15 struct student *next; //結構體指針 16 }stu; 17 stu *head; 18 19 void print() //主菜單 20 { 21 system("cls"); 22 printf("\n\n\n"); 23 printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); 24 printf(" ***********************************************************\n"); 25 printf(" \t\t\t班級通信錄管理系統\n"); 26 printf("\n"); 27 printf(" \t\t1. 輸入數據"); 28 printf("\t\t2. 顯示數據\n"); 29 printf(" \t\t3. 插入數據"); 30 printf("\t\t4. 刪除數據\n"); 31 printf(" \t\t5. 查看數據"); 32 printf("\t\t6. 修改數據\n"); 33 printf(" \t\t7. 保存數據"); 34 printf("\t\t8. 返回主菜單\n"); 35 printf(" ***********************************************************\n"); 36 printf(" ~~~~~退~~~~~~~~~~出~~~~~~~~~~請~~~~~~~~~~按~~~~~~~~~~9~~~~~\n"); 37 printf(" -----------------------------------------------------------\n\n"); 38 } 39 40 41 void input(stu *p1) //輸入相關數據 42 { 43 printf("姓名:"); 44 scanf("%s",&p1->name); 45 printf("學號:"); 46 scanf("%s",&p1->num); 47 printf("性別:"); 48 scanf("%s",&p1->sex); 49 printf("籍貫:"); 50 scanf("%s",&p1->from); 51 printf("政治面貌:"); 52 scanf("%s",&p1->political); 53 printf("手機號:"); 54 scanf("%s",&p1->phone); 55 printf("QQ號:"); 56 scanf("%s",&p1->QQ); 57 printf("宿舍:"); 58 scanf("%s",&p1->dorm); 59 } 60 61 62 stu * inputdata() //數據輸入的函數 63 { 64 stu *p1,*p2; 65 int i=1; 66 p1=(stu *)malloc(sizeof(stu)); 67 if(p1!=NULL) 68 { 69 head=p1; 70 printf("\n\t\t\t☆☆☆輸入數據☆☆☆\n"); 71 printf("------------------------------------------------------------------\n"); 72 printf("在姓名處輸入「ok」表明輸入數據結束\n"); 73 while(i) 74 { 75 printf("姓名:"); 76 scanf("%s",&p1->name); 77 if(strcmp(p1->name,"ok")==0) 78 { 79 printf("\n輸入完畢!\n"); 80 printf("========================================================================\n"); 81 i=0; 82 p2->next=NULL; 83 free(p1); 84 p1=p2; 85 } 86 else 87 { 88 printf("學號:"); 89 scanf("%s",&p1->num); 90 printf("性別:"); 91 scanf("%s",&p1->sex); 92 printf("籍貫:"); 93 scanf("%s",&p1->from); 94 printf("政治面貌:"); 95 scanf("%s",&p1->political); 96 printf("手機號:"); 97 scanf("%s",&p1->phone); 98 printf("QQ號:"); 99 scanf("%s",&p1->QQ); 100 printf("宿舍:"); 101 scanf("%s",&p1->dorm); 102 printf("=====================================\n"); 103 p2=p1; 104 p1=(stu *)malloc(sizeof(stu)); 105 if(p1!=NULL) 106 { 107 p2->next=p1; 108 } 109 } 110 } 111 return(p1->next); 112 } 113 } 114 115 116 stu * lookdata(stu *p1) //查看數據的函數 117 { 118 printf("\n\t\t\t☆☆☆顯示數據☆☆☆\n"); 119 printf("----------------------------------------------------------------------\n"); 120 while(p1!=NULL) 121 { 122 printf("姓名:%s\n",p1->name); 123 printf("學號:%s\t",p1->num); 124 printf("性別:%s\t",p1->sex); 125 printf("籍貫:%s\t",p1->from); 126 printf("政治面貌:%s\t",p1->political); 127 printf("手機號:%s\t",p1->phone); 128 printf("QQ號:%s\t",p1->QQ); 129 printf("宿舍:%s\n",p1->dorm); 130 printf("======================================================================\n"); 131 p1=p1->next; 132 } 133 return p1; 134 } 135 136 137 void insert() //插入數據 138 { 139 int i; 140 char named[20]; 141 stu *p1,*p2,*p3; 142 p1=head; 143 p3=(stu *)malloc(sizeof(stu)); 144 p3->next=NULL; 145 printf("\n\t\t\t☆☆☆插入數據☆☆☆\n"); 146 printf("----------------------------------------------------------------------\n"); 147 printf("請輸入插入者的資料:\n"); 148 input(p3); 149 printf("\n插入選項\n"); 150 printf("1.首位置插入\t2.尾位置插入\t3.前插\n"); 151 printf("請輸入你的選擇:"); 152 scanf("%d",&i); 153 switch(i) 154 { 155 case 1:p3->next=p1; 156 head=p3; 157 break; 158 case 2:while(p1->next!=NULL) 159 { 160 p2=p1; 161 p1=p1->next; 162 } 163 p1->next=p3; 164 break; 165 case 3:printf("請輸入姓名(前插):"); 166 scanf("%s",named); 167 while(strcmp(named,p1->name)!=0) 168 { 169 p2=p1; 170 p1=p1->next; 171 } 172 p2->next=p3; 173 p3->next=p1; 174 break; 175 } 176 printf("插入成功!\n"); 177 printf("======================================================================\n"); 178 return; 179 } 180 181 void deleted() //刪除數據 182 { 183 stu *p1,*p2; 184 char Name[20]; //想要刪除的人的姓名 185 printf("\n\t\t\t☆☆☆刪除數據☆☆☆\n"); 186 printf("----------------------------------------------------------------------\n"); 187 printf("請輸入要刪除的姓名:"); 188 scanf("%s",Name); 189 p1=head; 190 if(head==NULL) 191 { 192 printf("內存空空神馬都沒有!\n"); 193 printf("======================================================================\n"); 194 return; 195 } 196 if(strcmp(Name,p1->name)==0) 197 { 198 head=p1->next; 199 printf("刪除成功!\n"); 200 printf("======================================================================\n"); 201 return; 202 } 203 while(p1!=NULL&&(strcmp(Name,p1->name)!=0)) 204 { 205 p2=p1; 206 p1=p1->next; 207 } 208 if(p1==NULL) 209 { 210 printf("此人不存在!\n"); 211 printf("======================================================================\n"); 212 return; 213 } 214 if(p1->next!=NULL) 215 { 216 p1=p1->next; 217 p2->next=p1; 218 printf("刪除成功!\n"); 219 printf("======================================================================\n"); 220 return; 221 } 222 else 223 { 224 p2->next=NULL; 225 printf("刪除成功!\n"); 226 printf("======================================================================\n"); 227 return; 228 } 229 } 230 231 232 find(stu *p2) //經過姓名查找查看數據的函數 233 { 234 char name[20]; 235 int b=0; 236 printf("\n\t\t\t☆☆☆查看數據☆☆☆\n"); 237 printf("----------------------------------------------------------------------\n"); 238 printf("請輸入您想查找人的姓名:"); 239 scanf("%s",name); 240 while(p2!=NULL) 241 { 242 if(strcmp(name,p2->name)==0) 243 { 244 printf("你要找到的數據\n"); 245 printf("姓名:%s\n",p2->name); 246 printf("學號:%s\t",p2->num); 247 printf("性別:%s\t",p2->sex); 248 printf("籍貫:%s\t",p2->from); 249 printf("政治面貌:%s\t",p2->political); 250 printf("手機號:%s\t",p2->phone); 251 printf("QQ號:%s\t",p2->QQ); 252 printf("宿舍:%s\n",p2->dorm); 253 printf("======================================================================\n"); 254 b=1; 255 } 256 p2=p2->next; 257 } 258 if(b==0) 259 { 260 printf("\n您要查找的人不存在!\n"); 261 } 262 } 263 264 265 update(stu *p2) //經過姓名查找修改數據 266 { 267 char name[20]; 268 int b=0,i; 269 printf("\n\t\t\t☆☆☆修改數據☆☆☆\n"); 270 printf("----------------------------------------------------------------------\n"); 271 printf("請輸入將要修改人的姓名:"); 272 scanf("%s",name); 273 while(p2!=NULL) 274 { 275 if(strcmp(name,p2->name)==0) 276 { 277 printf("該同窗的基本信息\n"); 278 printf("姓名:%s\n",p2->name); 279 printf("學號:%s\t",p2->num); 280 printf("性別:%s\t",p2->sex); 281 printf("籍貫:%s\t",p2->from); 282 printf("政治面貌:%s\t",p2->political); 283 printf("手機號:%s\t",p2->phone); 284 printf("QQ號:%s\t",p2->QQ); 285 printf("宿舍:%s\n",p2->dorm); 286 printf("\n請選擇要修改的信息\n"); 287 printf("\t1.姓名\t2.學號\t3.性別\t4.籍貫\n\t5.政治面貌\t6.手機號\t7.QQ\t8.宿舍\n"); 288 printf("\n您的選擇是(1~8):"); 289 scanf("%d",&i); 290 printf("請輸入修改以後的內容\n"); 291 switch(i) 292 { 293 case 1:printf("姓名:"); 294 scanf("%s",&p2->name); 295 break; 296 case 2:printf("學號:"); 297 scanf("%s",&p2->num); 298 break; 299 case 3:printf("性別:"); 300 scanf("%s",&p2->sex); 301 break; 302 case 4:printf("籍貫:"); 303 scanf("%s",&p2->from); 304 break; 305 case 5:printf("政治面貌:"); 306 scanf("%s",&p2->political); 307 break; 308 case 6:printf("手機號:"); 309 scanf("%s",&p2->phone); 310 break; 311 case 7:printf("QQ:"); 312 scanf("%s",&p2->QQ); 313 break; 314 case 8:printf("宿舍:"); 315 scanf("%d",&p2->dorm); 316 break; 317 } 318 printf("\n修改爲功!\n"); 319 printf("=========================================================================\n"); 320 b=1; 321 } 322 p2=p2->next; 323 } 324 if(b==0) 325 { 326 printf("沒有找到該人的資料!\n"); 327 } 328 } 329 330 331 save(stu *p2) //保存數據 332 { 333 FILE *fp; 334 char file[15]; 335 printf("\n\t\t\t☆☆☆保存數據☆☆☆\n"); 336 printf("----------------------------------------------------------------------\n"); 337 printf("輸入文件名:"); 338 scanf("%s",file); 339 if((fp=fopen(file,"w"))==NULL) 340 { 341 printf("cannot open this file\n"); 342 exit(0); 343 } 344 fprintf(fp,"姓名\t學號\t性別\t籍貫\t政治面貌\t手機號\tQQ號\t宿舍\n"); 345 while(p2!=NULL) 346 { 347 fprintf(fp,"%s\t",p2->name); 348 fprintf(fp,"%s\t",p2->num); 349 fprintf(fp,"%s\t",p2->sex); 350 fprintf(fp,"%s\t",p2->from); 351 fprintf(fp,"%s\t",p2->political); 352 fprintf(fp,"%s\t",p2->phone); 353 fprintf(fp,"%s\t",p2->QQ); 354 fprintf(fp,"%s\n",p2->dorm); 355 p2=p2->next; 356 } 357 printf("\n保存成功!\n"); 358 printf("======================================================================\n"); 359 fclose(fp); 360 } 361 362 363 void screen() 364 { 365 int i; 366 char s[251]={"歡迎使用由ZM製做班級通信錄管理系統,\n\n\t\t\t本系統用於通信錄管理----排序,打印\n\n\n\t\tWelcome to use produced by ZM class address book\n\n\t\t management system,sorting,printing"}; 367 368 printf("\n================================================================================\n"); 369 printf("\n\n\n\t\t\t"); 370 for(i=0;s[i]!=NULL;i++) 371 { 372 Sleep(30); 373 printf("%c",s[i]); 374 } 375 printf("\n\n\n\n\n\n\n\n\t\t ~ Hi~ o(* ̄▽ ̄*)ブ~ ~ ~祝您旅途愉快~ ~\n"); 376 printf("================================================================================\n"); 377 378 } 379 380 381 void main() 382 { 383 int i; 384 system("color 4e"); 385 screen(); 386 Sleep(3000); 387 print(); 388 while(1) 389 { 390 printf("請輸入你的選擇(1~9):"); 391 loop:scanf("%d",&i); 392 if(i<1||i>9) 393 { 394 printf("輸入有誤,請在1~9中進行選擇:"); 395 goto loop; 396 } 397 switch(i) 398 { 399 case 1: 400 inputdata(); 401 break; 402 case 2: 403 lookdata(head); 404 break; 405 case 3: 406 insert(); 407 break; 408 case 4: 409 deleted(); 410 break; 411 case 5: 412 find(head); 413 break; 414 case 6: 415 update(head); 416 break; 417 case 7: 418 save(head); 419 break; 420 case 8: 421 print(); 422 break; 423 case 9: 424 exit(1); 425 break; 426 } 427 } 428 }