• luming.02无限进步 #我的创作纪念日


            前言:今天早上起床后,看见CSDN官方小助手发来一条系统通知,刚好没什么事,就点开分享分享我的创作经历

            luming.02 ,不知不觉今天已经是你成为创作者的 第128天 啦,为了纪念这一天,我们为您准备了一份专属小惊喜,期待您来领取哦(有效期只有7天!)

    机缘

    要说到成为创作者的初衷和机缘的话
            坦白的说,我的初衷并不纯洁,并不是想着单纯的分享经验,交流技术,有部分原因是这玩意看着很炫酷,觉得如果能在某个互联网平台上有很多粉丝,然后还有相关的技术,我觉得这种实在是太酷辣,感觉这是个很拿得出手,很有面子的事情。

            但是随着平常敲代码,学习的过程中,慢慢地就感觉到了那种分享技术和经验然后被别人认可的认同感,就像打游戏打BOSS一样,玩家通过不断的打怪升级,慢慢的提升自己的装备,提升自己的技术和熟练度,最后打败BOSS,这当然是一件非常有成就感的事情,对应到成为创作者的身份,在创作博客的过程中学习,慢慢的提升自己,这就和打BOSS一样,慢慢的就觉得这样的提升自己的过程非常的充实,也能明确的感受到自己自己技术的提升的快乐,于是在这个过程中,就慢慢确定了自己明确的要成为一个创作者

    今后的创作分享也不会停止,大多是以一下方面为主

    1. 实战项目中的经验分享
    2. 日常学习过程中的记录
    3. 通过文章进行技术交流

    收获

            说起在文章创作的过程中的收获的话,其实最多的还是技术上的收获,从一个懵懂无知的小白变为了稍微知道一点的小白,对计算机这个行业领域的了解也是多了不少,也收获了很多学习方法,同样的也认识了许多志同道合的大佬们,从他们那里也学到了不少,总之,这些收获是无法用数量和物质来言语的,这大多是对个人全方位的提升

    要说数据上收获了多少的话,目前大概是下图这样


     


    日常

            慢慢的,写的博客越来越多,分享的代码越来越多,创作的次数越来越频繁,我渐渐意识到,创作已经成为了生活了一部分了,现在大多都是有课上课,没课的话想一想有没有什么创作的点子和灵感,有的话就可以构思怎么去创作怎么去写,如果没有的话可能才会去考虑玩会儿游戏什么的,总的来说就是在有限的精力下,在学校学习之余进行创作


    成就

            说到写的最好的代码,我好像还没什么能拿得出手的代码,那这里就放俩个能完整运行的程序吧,一个三子棋,一个通讯录管理系统

    三子棋

    头文件

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include
    3. #include
    4. #include
    5. #define ROW 3 //定义 行为3
    6. #define COL 3 //定义 列为3
    7. //打印屏幕菜单
    8. void screen();
    9. //初始化
    10. void initialize(char board[ROW][COL], int row, int col);
    11. //打印棋盘
    12. void displayboard(char board[ROW][COL],int row,int col);
    13. //玩家下棋
    14. void palyer_move(char board[ROW][COL], int row, int col);
    15. //电脑下棋
    16. void computer_move(char board[ROW][COL], int row, int col);
    17. //判断输赢
    18. char IsWin(char board[ROW][COL], int row, int col);

    函数实现 

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include"game.h"
    3. void screen()
    4. {
    5. printf("--------------------------\n");
    6. printf("---------1.Play ----------\n");
    7. printf("--------------------------\n");
    8. printf("---------2.Esc ----------\n");
    9. printf("--------------------------\n");
    10. }
    11. void initialize(char board[ROW][COL], int row, int col)
    12. {
    13. for (int i = 0; i < row; i++)
    14. {
    15. for (int j = 0; j < col; j++)
    16. {
    17. board[i][j] = ' ';
    18. }
    19. }
    20. }
    21. void displayboard(char board[ROW][COL], int row, int col)
    22. {
    23. for (int i = 0; i < row; i++)
    24. {
    25. for (int j = 0; j < col; j++)
    26. {
    27. printf(" %c ", board[i][j]);
    28. //打印分割列
    29. if (j < col - 1)
    30. printf("|");
    31. }
    32. //打印分割行
    33. if (i < row - 1)
    34. printf("\n---|---|---\n");
    35. }
    36. printf("\n");
    37. }
    38. void palyer_move(char board[ROW][COL], int row, int col)
    39. {
    40. int x = 0;
    41. int y = 0;
    42. printf("\n----玩家下棋----\n");
    43. while (1)
    44. {
    45. printf("请输入落子的坐标:");
    46. scanf("%d %d", &x, &y);
    47. if (x <= 0 || x > 3 || y <= 0 || y > 3)
    48. {
    49. printf("非法输入,请重新输入\n");
    50. }
    51. else if (board[x-1][y-1] == ' ')
    52. {
    53. board[x-1][y-1] = '*';
    54. break;
    55. }
    56. else
    57. printf("输入位置被占用,请重新输入\n");
    58. }
    59. }
    60. void computer_move(char board[ROW][COL], int row, int col)
    61. {
    62. int x = 0;
    63. int y = 0;
    64. printf("\n----电脑下棋----\n");
    65. while (1)
    66. {
    67. int x = rand() % ROW;//使得随机数大小为1--3
    68. int y = rand() % COL;//使得随机数大小为1--3
    69. if (board[x][y] == ' ')
    70. {
    71. board[x][y] = '#';
    72. break;
    73. }
    74. }
    75. }
    76. static int IsFull(char board[ROW][COL], int row, int col)
    77. {
    78. int i = 0;
    79. int j = 0;
    80. for (i = 0; i < row; i++)
    81. {
    82. for (j = 0; j < col; j++)
    83. {
    84. if (board[i][j] == ' ')
    85. return 0;
    86. }
    87. }
    88. return 1;
    89. }
    90. //玩家赢 - '*'
    91. //电脑赢 - '#'
    92. //平局 --- 'Q'
    93. //游戏继续-'C'
    94. char IsWin(char board[ROW][COL], int row, int col)
    95. {
    96. int i = 0;
    97. for (i = 0; i < row; i++)
    98. {
    99. if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
    100. {
    101. return board[i][0];
    102. }
    103. }
    104. for (i = 0; i < col; i++)
    105. {
    106. if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
    107. {
    108. return board[0][i];
    109. }
    110. }
    111. if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
    112. {
    113. return board[1][1];
    114. }
    115. if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
    116. {
    117. return board[1][1];
    118. }
    119. //判断平局
    120. if (IsFull(board, row, col))
    121. {
    122. return 'Q';
    123. }
    124. return 'C';
    125. }

    主函数 

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include"game.h"
    3. void game()
    4. {
    5. //打印棋盘
    6. void screen();
    7. char ret = 0;
    8. char board[ROW][COL] = { 0 };
    9. initialize(board, ROW, COL);//初始化棋盘
    10. displayboard(board, ROW, COL);//打印棋盘
    11. while (1)
    12. {
    13. palyer_move(board, ROW, COL);//玩家下棋
    14. displayboard(board, ROW, COL);//打印棋盘
    15. //判断输赢
    16. ret = IsWin(board, ROW, COL);
    17. if (ret != 'C')
    18. {
    19. break;
    20. }
    21. computer_move(board, ROW, COL);//电脑下棋
    22. displayboard(board, ROW, COL);//打印棋盘
    23. //判断输赢
    24. ret = IsWin(board, ROW, COL);
    25. if (ret != 'C')
    26. {
    27. break;
    28. }
    29. }
    30. if (ret == '*')
    31. {
    32. printf("玩家赢\n");
    33. }
    34. else if (ret == '#')
    35. {
    36. printf("电脑赢\n");
    37. }
    38. else
    39. {
    40. printf("平局\n");
    41. }
    42. }
    43. int main()
    44. {
    45. srand((unsigned int)time(NULL));
    46. int input = 0;
    47. printf("请进行输入确认是否开始游戏\n");
    48. do
    49. {
    50. screen();
    51. scanf("%d", &input);
    52. switch (input)
    53. {
    54. case 1:
    55. printf("开始游戏\n");
    56. printf("三子棋\n");
    57. game();
    58. break;
    59. case 2:
    60. printf("退出游戏\n");
    61. break;
    62. default:
    63. printf("非法输入,请重新输入\n");
    64. break;
    65. }
    66. } while (input != 2);
    67. return 0;
    68. }

    通讯录管理系统 

    头文件

    1. #pragma once
    2. #include
    3. #include
    4. #include
    5. #include
    6. #define Name_Max 20
    7. #define Tel_Number 12
    8. #define Sex_Max 5
    9. #define Address_Max 30
    10. #define Contact_Max 100
    11. #define Contact_SZ 3
    12. //联系人结构体
    13. typedef struct PeopleInformation
    14. {
    15. char name[Name_Max];
    16. char telnumber[Tel_Number];
    17. int age;
    18. char sex[Sex_Max];
    19. char address[Address_Max];
    20. }PeoInfor;
    21. //通讯录结构体
    22. typedef struct Contact
    23. {
    24. PeoInfor* data;//结构体数组存放联系人结构体
    25. int size;//记录当前通讯录中有多少个联系人
    26. int capacity;//记录当前存放的容量
    27. }Contact;
    28. //目录
    29. void menu();
    30. //初始化通讯录
    31. void InitContact(Contact* cp);
    32. //增加联系人
    33. void AddContact(Contact* cp);
    34. //删除联系人
    35. void DelContact(Contact* cp);
    36. //通过姓名进行查找联系人
    37. int FindPeople(Contact* cp, char name[]);
    38. //展示全部通讯录信息
    39. void ShowContact(const Contact* cp);
    40. //查询联系人
    41. void SeachPeople(Contact* cp);
    42. //修改联系人信息
    43. void ModifyContact(Contact* cp);
    44. //jia扩容
    45. void CheckContact(Contact* cp);
    46. //销毁通讯录
    47. void DestoryContact(Contact* cp);
    48. //生成文件,保存通讯录中的数据
    49. void SaveContact(Contact* cp);
    50. //读取文件信息到通讯录
    51. void LoadContact(Contact* cp);

    函数实现 

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include "Contact.h"
    3. void menu()
    4. {
    5. printf("\n");
    6. printf("-----------------------------\n");
    7. printf("--- 1.添加联系人 -----\n");
    8. printf("--- 2.删除联系人 -----\n");
    9. printf("--- 3.查找联系人 -----\n");
    10. printf("--- 4.修改联系人信息 -----\n");
    11. printf("--- 5.显示全部信息 -----\n");
    12. printf("--- 0.退出通讯录 -----\n");
    13. printf("-----------------------------\n");
    14. }
    15. //读取文件信息到通讯录
    16. void LoadContact(Contact* cp)
    17. {
    18. //打开文件
    19. FILE* pf = fopen("contact.txt", "rb");
    20. if (pf == NULL)
    21. {
    22. perror("LoadContact");
    23. return;
    24. }
    25. //读取文件
    26. PeoInfor temp = { 0 };
    27. while (fread(&temp, sizeof(PeoInfor), 1, pf))
    28. {
    29. CheckContact(cp);
    30. cp->data[cp->size] = temp;
    31. cp->size++;
    32. }
    33. }
    34. //初始化通讯录
    35. void InitContact(Contact* cp)
    36. {
    37. //判断非空
    38. assert(cp);
    39. //初步初始化
    40. cp->size = 0;
    41. cp->capacity = Contact_SZ;
    42. cp->data = (PeoInfor*)calloc(cp->capacity, sizeof(PeoInfor));
    43. if (cp->data == NULL)
    44. {
    45. perror("InitContact->calloc");
    46. return;
    47. }
    48. //读取文件信息到通讯录
    49. LoadContact(cp);
    50. }
    51. //检查扩容
    52. void CheckContact(Contact* cp)
    53. {
    54. if (cp->size == cp->capacity)
    55. {
    56. PeoInfor* ptr = (PeoInfor*)realloc(cp->data, (cp->capacity + 2) * sizeof(PeoInfor));
    57. if (ptr != NULL)
    58. {
    59. cp->data = ptr;
    60. cp->capacity += 2;
    61. printf("增容成功\n");
    62. }
    63. else
    64. {
    65. perror("AddContact->realloc");
    66. return;
    67. }
    68. }
    69. }
    70. //增加联系人
    71. void AddContact(Contact* cp)
    72. {
    73. //判断非空
    74. assert(cp);
    75. //判断满后扩容
    76. CheckContact(cp);
    77. printf("请输入要添加的联系人的姓名:\n");
    78. scanf("%s", cp->data[cp->size].name);
    79. printf("请输入要添加的联系人的电话号:\n");
    80. scanf("%s", cp->data[cp->size].telnumber);
    81. printf("请输入要添加的联系人的年龄:\n");
    82. scanf("%d", &(cp->data[cp->size].age));
    83. printf("请输入要添加的联系人的性别:\n");
    84. scanf("%s", cp->data[cp->size].sex);
    85. printf("请输入要添加的联系人的住址:\n");
    86. scanf("%s", cp->data[cp->size].address);
    87. cp->size++;
    88. printf("添加成功\n");
    89. }
    90. //通过姓名进行查找联系人
    91. int FindPeople(Contact* cp, char name[])
    92. {
    93. assert(cp);
    94. for (int i = 0; i < cp->size; i++)
    95. {
    96. if (strcmp(cp->data[i].name, name) == 0)
    97. {
    98. return i;
    99. }
    100. }
    101. return -1;
    102. }
    103. //删除联系人
    104. void DelContact(Contact* cp)
    105. {
    106. assert(cp);
    107. char name[Name_Max];
    108. if (cp->size == 0)
    109. {
    110. printf("通讯录为空,无需删除\n");
    111. return;
    112. }
    113. printf("请输入选择删除的联系人的姓名:\n");
    114. scanf("%s", name);
    115. int ret = FindPeople(cp, name);
    116. if (ret == -1)
    117. {
    118. printf("要删除的联系人不存在\n");
    119. return;
    120. }
    121. for (int i = ret; i < cp->size - 1; i++)
    122. {
    123. cp->data[i] = cp->data[i + 1];
    124. }
    125. cp->size--;
    126. printf("删除成功\n");
    127. }
    128. //查询联系人
    129. void SeachPeople(Contact* cp)
    130. {
    131. assert(cp);
    132. char name[Name_Max];
    133. if (cp->size == 0)
    134. {
    135. printf("通讯录为空\n");
    136. return;
    137. }
    138. printf("请输入选择查找的联系人的姓名:\n");
    139. scanf("%s", name);
    140. int ret = FindPeople(cp, name);
    141. if (ret == -1)
    142. {
    143. printf("要查找的联系人不存在\n");
    144. return;
    145. }
    146. //名字 年龄 性别 电话 地址
    147. //xxx xxx xxx xxx xxx
    148. printf("%-10s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    149. //打印个人的信息
    150. printf("%-10s%-5d%-5s%-12s%-30s\n", cp->data[ret].name, cp->data[ret].age, cp->data[ret].sex, cp->data[ret].telnumber, cp->data[ret].address);
    151. }
    152. //展示全部通讯录信息
    153. void ShowContact(const Contact* cp)
    154. {
    155. assert(cp);
    156. if (cp->size == 0)
    157. {
    158. printf("通讯录为空\n");
    159. return;
    160. }
    161. //名字 年龄 性别 电话 地址
    162. //xxx xxx xxx xxx xxx
    163. printf("%-10s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    164. for (int i = 0; i < cp->size; i++)
    165. {
    166. //打印每个人的信息
    167. printf("%-10s%-5d%-5s%-12s%-30s\n", cp->data[i].name, cp->data[i].age, cp->data[i].sex, cp->data[i].telnumber, cp->data[i].address);
    168. }
    169. }
    170. //修改联系人信息
    171. void ModifyContact(Contact* cp)
    172. {
    173. assert(cp);
    174. char name[Name_Max];
    175. if (cp->size == 0)
    176. {
    177. printf("通讯录为空\n");
    178. return;
    179. }
    180. printf("请输入选择修改的联系人的姓名:\n");
    181. scanf("%s", name);
    182. int ret = FindPeople(cp, name);
    183. if (ret == -1)
    184. {
    185. printf("要修改的联系人信息不存在\n");
    186. return;
    187. }
    188. printf("请输入要修改的联系人的姓名:\n");
    189. scanf("%s", cp->data[ret].name);
    190. printf("请输入要修改的联系人的电话号:\n");
    191. scanf("%s", cp->data[ret].telnumber);
    192. printf("请输入要修改的联系人的年龄:\n");
    193. scanf("%d", &(cp->data[ret].age));
    194. printf("请输入要修改的联系人的性别:\n");
    195. scanf("%s", cp->data[ret].sex);
    196. printf("请输入要修改的联系人的住址:\n");
    197. scanf("%s", cp->data[ret].address);
    198. printf("修改成功\n");
    199. }
    200. //销毁通讯录
    201. void DestoryContact(Contact* cp)
    202. {
    203. free(cp->data);
    204. cp->data = NULL;
    205. cp->size = 0;
    206. cp->capacity = 0;
    207. }
    208. //生成文件,保存通讯录中的数据
    209. void SaveContact(Contact* cp)
    210. {
    211. //打开文件
    212. FILE* pf = fopen("contact.txt", "wb");
    213. if (pf == NULL)
    214. {
    215. perror("SaveContact");
    216. return;
    217. }
    218. //写文件
    219. for (int i = 0; i < cp->size; i++)
    220. {
    221. fwrite(cp->data + i, sizeof(PeoInfor), 1, pf);
    222. }
    223. //关闭文件
    224. fclose(pf);
    225. pf = NULL;
    226. }

    主函数 

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include "Contact.h"
    3. //枚举,增加程序的可读性
    4. enum options
    5. {
    6. EXIT,
    7. ADD,
    8. DEL,
    9. SEACH,
    10. MODIFY,
    11. SHOW
    12. };
    13. int main()
    14. {
    15. int input = 0;
    16. //创建通讯录
    17. Contact con;
    18. //初始化通讯录
    19. InitContact(&con);
    20. do
    21. {
    22. menu();
    23. printf("请输入你的选择: ");
    24. scanf("%d", &input);
    25. switch (input)
    26. {
    27. //增加联系人信息
    28. case ADD:
    29. AddContact(&con);
    30. break;
    31. //删除联系人信息
    32. case DEL:
    33. DelContact(&con);
    34. break;
    35. //查找某个联系人的信息
    36. case SEACH:
    37. SeachPeople(&con);
    38. break;
    39. //修改某个联系人的信息
    40. case MODIFY:
    41. ModifyContact(&con);
    42. break;
    43. //展示通讯录内的每一个联系人的信息
    44. case SHOW:
    45. ShowContact(&con);
    46. break;
    47. //退出通讯录管理系统
    48. case EXIT:
    49. SaveContact(&con);
    50. DestoryContact(&con);
    51. printf("通讯录已退出\n");
    52. break;
    53. //预防非法输入
    54. default:
    55. printf("输入错误,请重新输入\n");
    56. break;
    57. }
    58. } while (input);
    59. return 0;
    60. }

    憧憬

    创作规划的话,希望今年之内能够拿下博客之心,然后3个月之内能够再发布30篇文章

    职业生涯规划当然是希望能进大厂,然后拿到一份体面的工作和工资,希望自己的收获能对得起自己的付出,希望自己无限进步


    Tips

    1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
    2. 优质的纪念文章将会获得神秘打赏哦
  • 相关阅读:
    班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板下载 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业
    SVM应用
    【Python+Appium】开展自动化测试(十二)通过坐标定位元素
    学不会的线段树
    2023首届中国水果互联网上海论坛成功举办!
    福兴康膳宴,传承药膳文化,匠心打造优质餐品
    网络学习:邻居发现协议NDP
    Java注释:类、方法和字段注释
    ACTF flutter逆向学习
    QT QFileDialog文件选择对话框
  • 原文地址:https://blog.csdn.net/m0_69519887/article/details/133878251