目錄
說明
1、實訓目的
2、實訓內容
3、系統需求分析
4、系統設計與實作
完整程式代碼(純C語言 代碼)
5、系統測驗與運行結果分析
6、心得體會
原創性宣告
說明
大一下學期(2019年 上半年),開學第一周,C語言實訓作業!展示作品!
2019 年1月25日至 2019年3月 1 日 C語言程式設計實訓 總結報告
1、實訓目的
《C語言程式設計實訓》是移動軟體專業的主要實踐性教學環節,通過本課程的實訓,使學生在完成有關專業基礎課學習的基礎上,能夠綜合運用所學相關知識,并基于學生個人的創新創意,設計并實作相應的程式;使學生初步掌握程式設計的基本方法、初步具備運用程式設計解決實際問題的能力、初步具備進行工程設計的基本技能及分析能力,為畢業設計和以后的工程實踐打下良好的基礎,
2、實訓內容
設計并實作一個學生通訊錄管理系統,
3、系統需求分析
系統需求:用結構陣列實作通訊錄管理,
首先用switch分支結構,進行回圈,
其次,用檔案來存盤學生資訊,
然后,用函式實作不同的功能,例如:1.創建通訊錄、2.顯示通訊錄、3.查詢通訊錄、4.修改通訊錄、5.添加通訊錄、6.洗掉通訊錄、7.排序通訊錄、8.退出等,
4、系統設計與實作
在C++環境下 ,編譯運行,需要 添加 頭檔案 #include <cstdlib>
C++ 中error: ‘exit’ was not declared in this scope 的解決方法:添加頭檔案#include <cstdlib>
完整程式代碼(純C語言 代碼)
#include <stdio.h>
#include <string.h>
#define N 108
typedef struct telephone
{
char name[25];
char num[25];
char tel[25];
} TEL;
void DisplayMenu(); //顯示主選單
void save(TEL a[], int n);
void CreateList(TEL a[], int n); //1.創建通訊錄
void DisplayList(TEL a[], int n); //2.顯示通訊錄
void InquireListName(TEL a[], int n); //3.按姓名查詢通訊錄
void InquireListNum(TEL a[], int n); //4.按學號查詢通訊錄
void ChangeListName(TEL a[], int n); //5.按姓名修改通訊錄
void ChangeListNum(TEL a[], int n); //6.按學號修改通訊錄
int DelListName(TEL a[], int n); //7.按姓名洗掉通訊錄
int DelListNum(TEL a[], int n); //8.按學號洗掉通訊錄
void UpSortListName(TEL a[], int n); //9.姓名升序排序通訊錄
void DownSortListNum(TEL a[], int n); //10.學號逆序排序通訊錄
int AddList(TEL a[], int n); //11.添加學生資訊
int main()
{
struct telephone a[N];
int i, n;
FILE *fp;
if ((fp = fopen("stu.dat", "r")) != NULL) //如果檔案stu.dat已存在
{ // 則把資料從檔案加載到陣列a(讀入記錄個數n和n個姓名、學號、電話號碼)
fscanf(fp, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fp, "%s%s%s", a[i].name, a[i].num, a[i].tel);
}
else
{
printf("第一次使用該系統,請輸入n和n個姓名、學號、電話號碼:\n");
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%s%s%s", a[i].name, a[i].num, a[i].tel);
save(a, n);
}
DisplayMenu(); //顯示主選單
while (1)
{
char select;
char name[25];
scanf(" %c", &select);
if (select < 'a' || select > 'l')
{
printf("輸入錯誤!\n");
continue;
}
//if( select=='l' )
// break;
switch (select)
{
case 'a':
DisplayMenu(); //顯示主選單
break;
case 'b':
DisplayList(a, n); //2.顯示通訊錄
break;
case 'c':
InquireListName(a, n); //3.按姓名查詢通訊錄
break;
case 'd':
InquireListNum(a, n); //4.按學號查詢通訊錄
break;
case 'e':
ChangeListName(a, n); //5.按姓名修改通訊錄
break;
case 'f':
ChangeListNum(a, n); //6.按學號修改通訊錄
break;
case 'g':
if (DelListName(a, n)) //7.按姓名洗掉通訊錄
n--;
break;
case 'h':
if (DelListNum(a, n)) //8.按學號洗掉通訊錄
n--;
break;
case 'i':
UpSortListName(a, n); //9.姓名升序排序通訊錄
break;
case 'j':
DownSortListNum(a, n); //10.學號逆序排序通訊錄
break;
case 'k':
if (AddList(a, n)) //11.添加學生資訊
n++;
save(a, n);
break;
case 'l':
exit(0); //12.退出系統
break;
}
}
return 0;
}
void save(TEL a[], int n)
{
int i;
FILE *fp;
fp = fopen("stu.dat", "w");
fprintf(fp, "%d\n", n);
for (i = 0; i < n; i++)
fprintf(fp, "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
}
void DisplayMenu() //1.顯示主選單
{
printf(" 學生通訊錄管理系統\n\n");
printf("*************************系統功能選單**************************\n");
printf(" -------------------------------------------------------------\n");
printf(" a.顯示主選單 b.顯示通訊錄\n");
printf("************************************************************\n");
printf(" c.按姓名查詢通訊錄 d.按學號查詢通訊錄\n");
printf("************************************************************\n");
printf(" e.按姓名修改通訊錄 f.按學號修改通訊錄\n");
printf("************************************************************\n");
printf(" g.按姓名洗掉通訊錄 h.按學號洗掉通訊錄\n");
printf("************************************************************\n");
printf(" i.姓名升序排序通訊錄 j.學號逆序排序通訊錄\n");
printf("************************************************************\n");
printf(" k.添加學生資訊 l.退出系統\n");
printf(" -------------------------------------------------------------\n");
printf("***************************************************************\n\n");
printf("請選擇您需要的操作:\n");
}
void DisplayList(TEL a[], int n) //2.顯示通訊錄
{
int i;
printf("顯示通訊錄:\n");
for (i = 0; i < n; i++)
printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
printf("\n");
}
void InquireListName(TEL a[], int n) //3.按姓名查詢通訊錄
{
int i, flag;
char SearchName[25];
printf("按姓名查詢通訊錄:\n");
scanf("%s", SearchName);
for (i = 0, flag = 0; i < n; i++)
{
if (strcmp(SearchName, a[i].name) == 0)
{
printf("%s\t", a[i].name);
printf("%s\t", a[i].num);
printf("%s\n", a[i].tel);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("未查詢到該姓名資訊!\n");
}
printf("\n");
}
void InquireListNum(TEL a[], int n) //4.按學號查詢通訊錄
{
int i, flag;
char SearchID[25];
printf("按學號查詢通訊錄:\n");
scanf("%s", SearchID);
for (i = 0, flag = 0; i < n; i++)
{
if (strcmp(SearchID, a[i].num) == 0)
{
printf("%s\t", a[i].name);
printf("%s\t", a[i].num);
printf("%s\n", a[i].tel);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("未查詢到該學號資訊!\n");
}
printf("\n");
}
void ChangeListName(TEL a[], int n) //5.按姓名修改通訊錄
{
int i, flag;
char SearchName[25];
printf("按姓名修改通訊錄:\n");
scanf("%s", SearchName);
for (i = 0, flag = 0; i < n; i++)
{
if (strcmp(SearchName, a[i].name) == 0)
{
strcpy(a[i].name, SearchName);
printf("請輸入要修改的學號:");
scanf("%s", a[i].num);
printf("請輸入要修改的電話號碼:");
scanf("%s", a[i].tel);
//strcpy(p[i].name,ChangeName);
//strcpy(p[i].name,ChangeTel);
save(a, n);
printf("資訊修改完畢!\n");
printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
flag = 1;
break;
}
}
if (flag == 0)
printf("未找到該姓名資訊!");
printf("\n");
}
void ChangeListNum(TEL a[], int n) //6.按學號修改通訊錄
{
int i, flag;
char SearchNum[25];
printf("按學號修改通訊錄:\n");
scanf("%s", SearchNum);
for (i = 0, flag = 0; i < n; i++)
{
if (strcmp(SearchNum, a[i].num) == 0)
{
strcpy(a[i].num, SearchNum);
printf("請輸入要修改的名字:");
scanf("%s", a[i].name);
printf("請輸入要修改的電話號碼:");
scanf("%s", a[i].tel);
//strcpy(p[i].name,ChangeName);
//strcpy(p[i].name,ChangeTel);
save(a, n);
printf("資訊修改完畢!\n");
printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
flag = 1;
break;
}
}
if (flag == 0)
printf("未找到該學號資訊!");
printf("\n");
}
int DelListName(TEL a[], int n) //7.按姓名洗掉通訊錄
{
int i, j;
char SearchName[25];
printf("按姓名洗掉通訊錄:\n");
scanf("%s", SearchName);
for (i = 0; i < n; i++)
{
if (strcmp(a[i].name, SearchName) == 0)
break;
}
if (i >= n)
{
printf("未查詢到該姓名資訊!按姓名洗掉通訊錄失敗!\n");
return 0;
}
else
{
for (j = i; j < n - 1; j++)
a[j] = a[j + 1];
save(a, n);
printf("按姓名洗掉通訊錄成功!\n");
return 1;
}
}
int DelListNum(TEL a[], int n) //8.按學號洗掉通訊錄
{
int i, j, flag;
char SearchNum[25];
printf("按學號洗掉通訊錄:\n");
scanf("%s", SearchNum);
for (i = 0; i < n; i++)
{
if (strcmp(a[i].num, SearchNum) == 0)
break;
}
if (i >= n)
{
printf("未查詢到該學號資訊!按學號洗掉通訊錄失敗!\n");
return 0;
}
else
{
for (j = i; j < n - 1; j++)
a[j] = a[j + 1];
printf("按學號洗掉通訊錄成功!\n");
save(a, n);
return 1;
}
printf("\n");
}
void UpSortListName(TEL a[], int n) //9.姓名升序排序通訊錄
{
int i, j;
TEL temp;
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(a[i].name, a[j].name) > 0)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
printf("姓名升序排序通訊錄:\n");
for (i = 0; i < n; i++)
printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
printf("\n");
}
void DownSortListNum(TEL a[], int n) //10.學號逆序排序通訊錄
{
int i, j;
TEL temp;
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(a[i].num, a[j].num) > 0)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
printf("學號逆序排序通訊錄:\n");
for (i = n - 1; i >= 0; i--)
printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
printf("\n");
}
int AddList(TEL a[], int n) //11.添加學生資訊
{
int i, flag;
char AddNum[25];
printf("添加通訊錄:\n");
printf("請輸入要添加的學號:");
scanf("%s", AddNum);
for (i = 0, flag = 0; i < n; i++)
{
if (strcmp(AddNum, a[i].num) == 0)
{
flag = 1;
printf("學號重復!\n");
return 0;
}
}
if (flag == 0)
{
//n++;
printf("學號不重復!請添加資訊:\n");
printf("請輸入要添加的名字:");
scanf("%s", a[n].name);
strcpy(a[n].num, AddNum);
printf("請輸入要添加的電話號碼:");
scanf("%s", a[n].tel);
//save(a,n);
printf("添加資訊成功!\n");
return 1;
//printf("%d",n);
}
printf("\n");
}
5、系統測驗與運行結果分析
涉及“檔案操作”!
程式運行無誤,本程式容錯能力較強,有很強的錯誤查找能力,本程式各個小函式的聯系性并不強,容易修改與改善,
運行結果無誤,無論是“修改通訊錄”還是“添加通訊錄、洗掉通訊錄”本程式都能夠正確執行,并保存到檔案之中,非常方便, “洗掉通訊錄”中“按姓名洗掉通訊錄”與“按學號洗掉通訊錄”分為兩個函式,這使得“洗掉函式”更為簡單、清晰,同時使得整個程式更為簡單、優化,
![]()
6、心得體會
此次實訓,識訓甚多,受益匪淺,“學生通訊錄管理系統”用到的知識很多,函式、結構、檔案,缺少任何一部分,都無法編出完好的程式,另外,“學生通訊錄管理系統”對思維能力要求苛刻,能夠使學生真正地掌握所學知識,
原創性宣告
本人鄭重宣告本報告內容,是由作者本人獨立完成的,有關觀點、方法、資料和文獻等的參考已在文中指出,除文中已注明參考的內容外,本報告不包含任何其他個人或集體已經公開發表的作品成果,不存在剽竊、抄襲行為,
特此宣告!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282405.html
標籤:其他
上一篇:資料結構-五種排序


