精华内容
下载资源
问答
  • C语言课程设计.zip

    2019-07-10 09:12:33
    大学生C语言课程设计——成绩管理系统,包含设计报告,以及设计的总结心得。对C语言课程设计有着很好的参考依据。
  • C语言课程设计-职工信息管理系统程序设计C语言课程设计报告设计题目:职工信息管理系统程序设计课程设计评语2目 录31.课程论文题目42.程序设计思路43.功能模块图54.数据结构设计55.算法设计66.程序代码137....

    C语言课程设计-职工信息管理系统程序设计

    C语言课程设计报告

    设计题目:职工信息管理系统程序设计

    课程设计评语2

    目 录3

    1.课程论文题目4

    2.程序设计思路4

    3.功能模块图5

    4.数据结构设计5

    5.算法设计6

    6.程序代码13

    7.程序运行结果22

    8.编程中遇到的困难及解决方法25

    9.总结心得及良好建议26

    10.致谢26

    课程论文题目

    职工信息管理系统程序设计

    题目要求

    职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:

    系统以菜单的方式工作。

    职工信息录入功能 (职工信息用文件保存)。

    职工浏览功能。

    职工信息查询功能,查询方式可按学历查询或者工号查询。

    职工信息的删除、修改功能(可选项)。

    2.程序设计思路

    1、设计思路

    (1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;

    (2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;

    (3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。

    3.功能模块图

    5.算法设计

    1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。

    N

    Y

    2浏览模块

    【分析】

    该模块的功能是浏览职工的全部信息

    3排序模块

    N

    Y

    12

    1

    2

    4查询模块

    【分析】

    该模块的功能是根据输入的职工按照工号和学历查找对应的记录,找到以后,可进行继续查找或修改信息的操作。流程图如下:

    5修改模块

    【分析】

    该模块的功能是显示所有职工的信息,考虑到记录较多,建议采用分屏显示。显示完所有记录后,输入要修改的职工的工号,根据工号查到职工的记录,并提示用户修改该记录的哪部分信息,根据用户做的选择修改相应信息。流程图如下:

    Y

    6.程序代码

    #include

    #define N 50

    struct worker

    {

    char id[50];

    char name[20];

    char sex[10];

    char age[10];

    char edu[20];

    char salary[10];

    char address[20];

    char tel[20];

    }worker[N];

    void save(int n) //保存函数,保存n个记录

    { FILE *fp;

    int i;

    if((fp=fopen("worker.txt","wb"))==NULL) //以只写方式为输出打开一个二进制文件

    { printf("\nCannot open file\n");

    }

    for(i=0;i

    if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)

    printf("file write error\n");

    fclose(fp);

    }

    int load() //加载函数

    { FILE *fp;

    int i;

    if((fp=fopen("worker.txt","rb"))==NULL)

    {printf("\nCannot open file\n");

    return NULL;

    }

    for(i=0;!feof(fp);i++)

    fread(&worker[i],sizeof(struct worker),1,fp);

    fclose(fp);

    return(i-1);

    }

    void no_input(int i,int n) //工号输入函数,i表示第i个职工的信息,n表示比较到第n个职工

    { int j,k,w1;

    do

    {w1=0;

    printf("工号:");

    scanf("%s",worker[i].id);

    for(j=0;worker[i].id[j]!='\0';j++)

    if(w

    展开全文
  • c语言程序设计总结体会 篇一C语言课程设计心得体会 第一篇c语言课程设计心得体会 课程设计是培养学生综合运用所学知识 发现,提出分 析和解决实际问题锻炼实践能力的重要环节 是对学生实 际工作能力的具体训练和考察...
  • C语言课程设计学生成绩管理系统 个人心得体会 这一周以来的课程设计不仅让我明白了C语言的确是一门很有 用的但是又是不容易的一门课程起初刚开始做课程设计时以为 这个课程设计不会有多难只不过是把多个函数组合起来...
  • C语言课程设计学生成绩管理系统 个人心得体会 这一周以来的课程设计不仅让我明白了C语言的确是一门很有用的但是又是不容易的一门课程起初刚开始做课程设计时以为这个课程设计不会有多难只不过是把多个函数组合起来就...
  • C 语言课程设计学生成绩管理系统 个人心得体会 徐州工程学院 14 计嵌 1 班 07 组 张凯 这一周以来的课程设计不仅让我明白了 C 语言的确是一门很有用的但是又是不容易的一门课程 起初刚开始做课程设计时 以为这个课程...
  • C 语言课程设计学生成绩管理系统 个人心得体会 徐州工程学院 14 计嵌 1 班 07 组 张凯 这一周以来的课程设计不仅让我明白了 C 语言的确是一门很有用的但是又是不容 易的一门课程 起初刚开始做课程设计时 以为这个...
  • 本科生课程论文封面 课 程 名 称 C语言课程设计 教 师 姓 名 本科生姓名 本科生学号 本科生专业 072114 机械 所 在 院系 机电学院 类别: 日期: 2012年6月25 日 1 目录 课程论文题目 程序设计思路 功能模块图 数据...
  • 评分为优秀的课程设计! 设计内容: [问题描述] 每个航班记录包括八项,分别是:航班号、起点站、终点站、航班期、起飞时间、到达时间、...实际操作过程中遇到的问题及解决方法:设计总结心得体会。 6).上机演示。
  • 1课程设计的题目 2课程设计的目的 (设计要解决的问题) 3概要设计 (函数划分,总体设计) 4详细设计 (流程图,程序) 5调试结果 6总结 7心得体会 1 课程设计的题目: 学生成绩管理系统 2 设计的目的:...
  • C语言课程设计《通讯录管理系统》 操作系统为 Win 10,设计环境 Visual Studio 2019 目录 C语言课程设计《通讯录管理系统》 前言 一、需求分析 二、总体设计 三、详细设计 1,数据信息 2,模块设计 1...

    C语言:课程设计《通讯录管理系统》

    操作系统为 Win 10,设计环境 Visual Studio 2019


    目录

    C语言:课程设计《通讯录管理系统》

    前言

    一、需求分析

    二、总体设计

    三、详细设计

    1,数据信息

    2,模块设计

    1)新建联系人模块

    2)遍历模块

    3)查询模块

    4)定向删除模块

    5)修改模块

    6)排序模块

    7)清空模块

    四、总结及分析

    程序代码


     

    前言

    本文仅供学习交流,未经允许请勿转载。


    一、需求分析

    实现简单的通讯录信息管理,系统要求以菜单方式工作,因而根据题目要求,提供键盘式选择菜单实现功能选择,通讯录信息包括编号、姓名、年龄、性别、手机号等。通讯录信息采用链表保存,提供节点的输入、输出、查询、修改等操作;要实现通讯录信息的查询,则要提供查找功能(包括按编号查询、姓名查询和手机号查询三种查询方式);要实现通讯录信息的删除、修改、清空,则要提供节点的删除 、修改功能。

    1.系统以菜单方式工作。

    2.通讯录信息录入功能

    3.通讯录信息浏览功能 。

    4.通讯录信息查询功能。

    5.通讯录信息删除功能。

    6.通讯录修改功能。

    7.通讯录联系人排序功能

    8.通讯录清空功能。


    二、总体设计

    根据上面的需求分析,可以将这个系统设计分为以下模块:新建联系人模块、遍历模块、查询模块、定向删除模块、修改模块、排序模块、清空模块。

    下面为本次通讯录管理系统的程序框图,如下图所示。

     

     


    三、详细设计

    主要思想

    根据动态链表的特性来实现联系人的“增删改销”,从主菜单分支出来不同的功能,结构体中统一使用字符串方便后续调用大量数据保持格式正确。

    在定向删除模块中,通过对节点的头地址和尾地址的修改实现节点的删除(清空模块亦如此)。

    在排序模块中,因为直接使用链表排序难度很大,因此选择将节点放入相同结构的数组里面,改变不同节点的数组下标,然后调用数组的方式实现排序输出。

    在查询模块中,主要是调用节点数据,然后与输入值比较(不相同就换下一个节点比较直到数据相同,返还对应节点的地址),最后打印出来。

    在修改模块中,比较简单,依靠查询模块找到指定联系人的节点然后直接修改。

    1,数据信息

    编码、姓名年龄性别电话、住址

    建立通讯录结构体,结构体成员包括编号(唯一性且不可修改)、姓名年龄性别电话、住址

    typedef struct Node
    {
    	int id;//编号
    	char name[20];//姓名
    	char age[20];//年龄
    	char sex[20];//性别
    	char phone[20];//手机号
    	char address[20];//住址
    	struct Node* pNext;
    }Node;

    2,模块设计

    新建联系人模块:输入联系人的姓名性别、手机号以及其它的一些通讯的相关信息,通过void AddNodeList()函数来实现。

    遍历模块:浏览所有联系人的相关信息,通过自己定义的void ScanList()函数与void print(Node* pTemp)函数来实现。

    查询模块:可以按联系人姓名、编号、手机号来查询联系人的相关信息,通过自己定义的void Select()函数、Node* SelectNode1(char xm[20])函数 、Node* SelectNode2(int id)函数、Node* SelectNode3(char phone[20])函数来实现。

    定向删除模块:输入姓名来定位所要删除的节点地址,并完成节点的删除,通过自己定义的 void DeleteListRand() 函数,void DeleteListHead()函数,void DeleteListTail()和 Node* SelectNode1(char xm[20])函数 、Node* SelectNode2(int id)函数、Node* SelectNode3(char phone[20])函数来实现。

    排序模块:选择以年龄、编号、姓名、手机号来进行通讯录排序,通过自己定义void SortList()函数来实现。

    清空模块:清空所有的通讯录信息,通过自己定义的void FreeList()函数来实现。

    修改模块:通过姓名或者手机号锁定指定联系人,再选择下一项信息。通过自己定义的void change()函数来实现。

    1)新建联系人模块

    根据数据结构定义,按顺序输入新节点的相关值,通过调整每个节点的首尾指针地址,实现那动态链表。

    void AddNodeList()
    {
    	//创建一个节点
    	 Node* pTemp = (Node*)malloc(LEN);
    	//节点数据赋值
    	 printf("编号为%d\n", idnumber);
    	pTemp->id = idnumber;
    	printf("请输入姓名:");
    	scanf("%s", pTemp->name);
    	printf("\n");
    	printf("请输入年龄:");
    	scanf("%s", pTemp->age);
    	printf("\n");
    	printf("请输入性别:");
    	scanf("%s", pTemp->sex);
    	printf("\n");
    	printf("请输入手机号:");
    	scanf("%s", pTemp->phone);
    	printf("\n");
    	printf("请输入住址:");
    	scanf("%s", pTemp->address);
    	printf("\n");
    	pTemp->pNext = NULL;
    	//链接
    	if (NULL == phead)
    	{
    		phead = pTemp;
    		pend = pTemp;
    	}
    	else
    	{
    		pend->pNext = pTemp;
    		pend = pTemp;
    	}
    	system("pause");
    	system("cls");
    }

    2)遍历模块

    借助动态链表“首尾相连”的特点,实现节点的顺序输出。为实现模块化,特将打印结构独立出来为函数。这样做的优点在于,其他模块函数也可以调用它,从而减少编程工作量,提升程序设计的合理性。

    void ScanList()
    {
    	if (phead == NULL) {
    		printf("无任何联系人。\n");
    	} return;
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		print(pTemp);
    		pTemp = pTemp->pNext;
    	}
    	system("pause");
    	system("cls");
    }
    
    void print(Node* pTemp) {
    	 if (pTemp == NULL) {
    		 printf("\n--------------------您要查找的联系人不存在!--------------------------------\n");
    	 }
    	 else {
    		 printf("----------------------------------------------------------------------\n");
    		 printf("编号:%d\n", pTemp->id);
    		 printf("姓名:%s\n", pTemp->name);
    		 printf("年龄:%s\n", pTemp->age);
    		 printf("性别:%s\n", pTemp->sex);
    		 printf("手机号:%s\n", pTemp->phone);
    		 printf("住址:%s\n", pTemp->address);
    		 printf("----------------------------------------------------------------------\n");
    	 }
     }

    3)查询模块

    查询模块的设计思路,分“先找址,再输出”两步走。

    在此同样为实现模块化,提升编程效率,设计了 Node* SelectNode1(char xm[20])Node* SelectNode2(int id)、 Node* SelectNode3(char phone[20])三个指针函数,这三个寻址函数大同小异,因查询的数据不同而互相独立。

    void Select()函数分流给三个寻址函数,再交给void print(Node * pTemp)函数输出。

    //查询指定数据
    void Select()
    {
    	printf("1.按姓名查找\n");
    	printf("2.按编号查询\n");
    	printf("3.按手机号查找\n");
    	int index;
    	int b = 0;
    	scanf("%d", &index);
    	Node* pTemp = phead;
    	switch (index) {
    		//姓名查询
    	case 1:
    	{
    		char name[20];
    		printf("姓名:");
    		scanf("%s", name);
    		pTemp = SelectNode1(name);
    		print(pTemp);	
    	}break;
    	//编号查询
    	case 2:
    	{
    		int id = 0;
    		printf("编号:");
    		scanf("%d", &id);
    		pTemp = SelectNode2(id);
    		print(pTemp);
    	}break;
    	//手机号查询
    	case 3:
    	{
    		char phone[20];
    		printf("手机号:");
    		scanf("%s", phone);
    		pTemp = SelectNode3(phone);
    		print(pTemp);
    	}break;
    	}
    	system("pause");
    	system("cls");
    }
    
    //查询指定节点(name)
    Node* SelectNode1(char xm[20])
    {
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		if (strcmp(xm,pTemp->name)==0)
    		{
    			return pTemp;
    		}
    		pTemp = pTemp->pNext;
    	}
    	//没找到
    	return NULL;
    }
    
    //查询指定节点(id)
    Node* SelectNode2(int id)
    {
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		if ((pTemp->id)==id)
    		{
    			return pTemp;
    		}
    		pTemp = pTemp->pNext;
    	}
    	//没找到
    	return NULL;
    }
    
    //查询指定节点(phone)
    Node* SelectNode3(char phone[20])
    {
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		if (strcmp(phone, pTemp->phone) == 0)
    		{
    			return pTemp;
    		}
    		pTemp = pTemp->pNext;
    	}
    	//没找到
    	return NULL;
    }

    4)定向删除模块

    定向删除模块并不难,先通过寻址函数找到需要删除的节点地址。为提升程序运行效率,如果通讯录只有一个联系人就直接初始化结束。当有两个以上的联系人时,通过对前后联系人首位地址修改,跳过被删除的节点(最后释放其所占内存)。

    //定向删除
    void DeleteListRand()
    {
    	
    	if (phead == NULL)
    	{
    		printf("链表为空!\n");
    		system("pause");
    		system("cls");
    		return;
    	}
    	printf("1.按姓名查找\n");
    	printf("2.按编号查询\n");
    	printf("3.按手机号查找\n");
    	int index, yn;
    	scanf("%d", &index);
    	Node* pTemp = phead;
    	switch (index) {
    		//姓名删除
    	case 1: {
    		char name[20];
    		printf("请输入删除的联系人姓名\n");
    		scanf("%s", name);
    		pTemp = SelectNode1(name);
    		print(pTemp);
    	}break;
    		//编号删除
    	case 2: {
    		int id = 0;
    		printf("请输入删除的联系人编号\n");
    		scanf("%d", &id);
    		pTemp = SelectNode2(id);
    		print(pTemp);
    	}break;
    		//手机号删除
    	case 3: {
    		char phone[20];
    		printf("请输入删除的联系人手机号\n");
    		scanf("%s", phone);
    		pTemp = SelectNode3(phone);
    		print(pTemp);
    	}break;
    	}
    	printf("确定删除以上联系人吗?(输入 1 确认删除,输入 0 退出该模块) : ");
    	scanf("%d", &yn);
    	if (yn == 0) {
    		system("cls");
    	}
    	//开始删除
    	else {
    		//只有一个节点(直接清空)
    		if (phead == pend)
    		{
    			free(phead);
    			phead = NULL;
    			pend = NULL;
    			printf("操作成功\n");
    			n--;
    			system("pause");
    			system("cls");
    			return;
    		}
    		//有两个(及以上)节点
    		else if (phead->pNext == pend)
    		{
    			if (phead == pTemp)
    			{
    				DeleteListHead();
    			}
    			else
    			{
    				DeleteListTail();
    			}
    		}
    		else
    		{
    			if (phead == pTemp)
    			{
    				DeleteListHead();
    			}
    			else if (pend == pTemp)
    			{
    				DeleteListTail();
    			}
    			else
    			{
    				//找到删除节点的前一个节点
    				Node* pT = phead;
    				while (pT->pNext != pTemp)
    				{
    					pT = pT->pNext;
    				}
    				//成功找到后
    				pT->pNext = pTemp->pNext;
    				free(pTemp);
    			}
    
    		}
    		printf("操作成功\n");
    		n--;
    		system("pause");
    		system("cls");
    	}
    }
    
    //头删除
    void DeleteListHead()
    {
    	if (phead == NULL)
    	{
    		printf("链表为空!\n");
    		return;
    	}
    		Node* pTemp = phead;
    		phead = phead->pNext;
    		free(pTemp);
    }
    
    //尾删除
    void DeleteListTail()
    {
    	if (NULL == phead)
    	{
    		printf("链表为空!\n");
    		return;
    	}
    	//链表有一个节点
    	if (phead == pend)
    	{
    		free(phead);
    		phead = NULL;
    		pend = NULL;
    	}
    	else
    	{
    		//找到最后一个节点的前一个节点
    		Node* pTemp = phead;
    		while (pTemp->pNext != pend)
    		{
    			pTemp = pTemp->pNext;
    		}
    		free(pend);
    		pend = pTemp;
    		pend->pNext = NULL;
    	}
    }

    5)修改模块

    修改模块并不难,不过就是在寻址函数的基础上添加修改节点数据的步骤。通过新数据覆盖旧数据的方式,实现通讯录联系人的信息修改。

    //修改联系人信息
    void change() {
    	int yn, choose;
    	printf("1.按编号查找\n");
    	printf("2.按姓名查找\n");
    	printf("3.按手机号查找\n");
    	int index;
    	int b = 0;
    	scanf("%d", &index);
    	Node* pTemp = phead;
    	switch (index) {
    	case 1:
    	{
    		int id = 0;
    		printf("编号:");
    		scanf("%d", &id);
    		pTemp = SelectNode2(id);
    	}break;
    	case 2:
    	{
    		char name[20];
    		printf("姓名:");
    		scanf("%s", name);
    		pTemp = SelectNode1(name);
    	}break;
    	case 3:
    	{
    
    		char phone[20];
    		printf("手机号:");
    		scanf("%s", phone);
    		pTemp = SelectNode3(phone);
    	}break;
    	default:return;
    	}
    	print(pTemp);
    	printf("确定修改以上联系人吗?\n(输入 1 进入修改,输入 0 退出该模块) : ");
    	scanf("%d", &yn);
    	if (yn == 1)
    	{
    		printf("1.姓名    2.年龄    3.性别    4.手机号    5.住址\n请输入序号:");
    		scanf("%d", &choose);
    		switch (choose)
    		{
    		case 1: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->name);
    			printf("修改成功\n");
    		}break;
    		case 2: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->age);
    			printf("修改成功\n");
    		}break;
    		case 3: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->sex);
    			printf("修改成功\n");
    		}break;
    		case 4: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->phone);
    			printf("修改成功\n");
    		}break;
    		case 5: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->address);
    			printf("修改成功\n");
    		}break;
    		}
    		system("pause");
    		system("cls");
    	}
    	system("cls");
    }

    6)排序模块

    在排序模块中,为避免频繁修改链表结构,选择将节点放入相同结构的数组里面,通过改变不同节点的数组下标调用数组数据等方式实现排序。

    //条件排序
    void SortList()
    {
    	int choose;
    	printf("1.按年龄排序\n");
    	printf("2.按编号排序\n");
    	printf("3.按姓名排序\n");
    	printf("4.按手机号排序\n");
    	scanf("%d", &choose);
    	Node* pTemp = phead;
    	Node p[99] = { 0 };
    	//先把储存的节点头地址都放在数组中等待排序
    	for (int i = 0; i < n&&pTemp!=NULL; i++)
    	{
    		p[i] = *pTemp;
    		pTemp = pTemp->pNext;
    	}
    	switch (choose)
    	{
    	  //按年龄排序
    	  case 1:
    	  {
    		  //选择排序法
    		  for (int i = 0; i < n ; i++)
    		  {
    			  for (int j = 1; i+j< n; j++)
    			  {
    				  if (strcmp(p[i].age , p[ i+j ].age) > 0)
    				  {
    					  Node pt = p[i];
    					  p[i] = p[i + j];
    					  p[i + j] = pt;
    				  }
    			  }
    		  }
    		  break;
    	  }
    	  //按编号排序
    	   case 2:
    	   { 
    		   for (int i = 0; i < n; i++)
    		   {
    			   for (int j = 1; i + j < n; j++)
    			   {
    				   if (p[i].id == p[i + j].id)
    				   {
    					   Node pt = p[i];
    					   p[i] = p[i + j];
    					   p[i + j] = pt;
    				   }
    			   }
    		   }
    		   break;
    	   }
    	   //按姓名排序
    	   case 3:
    	   {
    		   //选择排序法
    		   for (int i = 0; i < n; i++)
    		   { 
    			   for (int j = 1; i + j < n; j++)
    			   {
    				   if (strcmp(p[i].name , p[i + j].name) > 0)
    				   {
    					   Node pt = p[i];
    					   p[i] = p[i + j];
    					   p[i + j] = pt;
    				   }
    			   }
    		   }
    		   break;
    	   }
    	   //按手机号排序
    	   case 4:
    	   {
    		   //选择排序法
    		   for (int i = 0; i < n; i++)
    		   {
    			   for (int j = 1; i + j < n; j++)
    			   {
    				   if (strcmp(p[i].phone, p[i + j].phone) > 0)
    				   {
    					   Node pt = p[i];
    					   p[i] = p[i + j];
    					   p[i + j] = pt;
    				   }
    			   }
    		   }
    		   break;
    	   }
    	}
    	system("cls");
    	printf("排序完成!\n");
    	printf("排序后结果为:\n");
    	for (int i = 0; i < n; i++)
    	{
    		printf("编号:%d\n", p[i].id);
    		printf("姓名:%s\n", p[i].name);
    		printf("年龄:%s\n", p[i].age);
    		printf("性别:%s\n", p[i].sex);
    		printf("手机号:%s\n", p[i].phone);
    		printf("住址:%s\n", p[i].address);
    		printf("\n");
    	}
    	system("pause");
    	system("cls");
    }

    7)清空模块

    先把每个节点所占内存逐一释放,然后将链表的首尾指针地址归零。这种方式最为合理有效。

    //链表清空
    void FreeList()
    {
    	int yn = 1;
    	printf("确定清空联系人吗?(输入 1 确认清空,输入 0 退出该模块) : ");
    	scanf("%d", &yn);
    	if (yn == 0) {
    		system("cls");
    	}
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		Node* pt = pTemp;
    		pTemp = pTemp->pNext;
    		free(pt);
    	}
    	phead = NULL;
    	pend = NULL;
    	printf("已全部清除\n");
    	n = 0;
    	idnumber = 0;
    	system("pause");
    	system("cls");
    }

     


    四、总结及分析

    自我总结:

    C语言作为一门基础语言,我觉得最精华的部分就是C语言的指针、链表和结构部分。前面所学的知识,只有在指针结构链表的基础上,才能发挥更大的作用。

    通讯录管理系统是我设计的第1个系统,面对现实当中通讯录管理的实际需求,我总结分析并设计了不同模块来满足需求。在模块的设计和调试当中,我感受到对链表、指针等方面有了更多的领悟,我会在之后巩固链表结构指针方面的知识,坚持勤学勤练。在本次设计当中有许多我想要实现的复杂功能没能成功,系统在体验方面仍有不足。我会继续努力探索,掌握技巧实现更多更便利的功能。

    以下是个人对链表、指针的领悟:

    #define LEN sizeof(Node)
    Node* pTemp = (Node*)malloc(LEN);

    LEN是我自己定义的数据结构所需要的内存量,malloc为我产生一个空白指针a(著名a无意义仅用描述)来保存内存长度为LEN的空白变量x(著名x无意义仅用描述)的头地址,接着(Node*)给空白指针a赋予Node类型(等同于给x进行规划)然后指针a变成半空白指针(有类型但无名)。最后Node*pTemp=半空白指针a(相当于给a命名为pTemp)。

    需要注意的是,不能死死扣在指针就是“指向”。因为指向这个概念非常抽象,不利于以后学习的深入。指针变量也是变量,只不过别的变量存储的是字符、数字等,而指针变量存储的是其他变量的地址。

    当出现这样的赋值语言“指针变量A = 指针变量B  这句话的意思是用指针变量A来使唤指针变量B,某种意义上A、B二者是同一个东西了


    程序代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    int n;//记录人数
    int idnumber=0;//赋予编号(唯一性,不可修改性)
    typedef struct Node
    {
    	int id;//编号
    	char name[20];//姓名
    	char age[20];//年龄
    	char sex[20];//性别
    	char phone[20];//手机号
    	char address[20];//住址
    	struct Node* pNext;
    }Node;
    #define LEN sizeof(Node)
     Node* phead = NULL;
     Node* pend = NULL;
     
     //打印模块
     void print(Node* pTemp);
     //新建联系人
     void AddNodeList();
     //显示全部数据
     void ScanList();
     //查询指定节点(姓名)
     Node* SelectNode1(char xm[20]);
     //查询指定节点(id)
     Node* SelectNode2(int id);
     //查询指定节点(phone)
     Node* SelectNode3(char phone[20]);
     //查询指定数据
     void Select();
     //定向删除
     void DeleteListRand();
     //头删除
     void DeleteListHead();
     //尾删除
     void DeleteListTail();
     //条件排序
     void SortList();
     //链表清空
     void FreeList();
     //菜单打印
     void showmenu();
     //修改联系人信息
     void change();
     
     
     //主函数
     int main()
     {
    	 phead;
    	 int choose;
    	 while (1)
    	 {
    		 showmenu();
    		 printf("请输入选择的功能序号: ");
    		 scanf("%d", &choose);
    		 switch (choose)
    		 {
    		 case 1:
    			 n++;
    			 idnumber++;
    			 AddNodeList();
    			 break;
    		 case 2:
    			 ScanList();
    			 break;
    		 case 3:
    			 Select();
    			 break;
    		 case 4:
    			 DeleteListRand();
    			 break;
    		 case 5:
    			 change();
    			 break;
    		 case 6:
    			 SortList();
    			 break;
    		 case 7:
    			 FreeList();
    			 break;
    		 default:
    			 break;
    		 }
    	 }
    	 system("pause");
    	 return 0;
     }
     
     //打印模块
     void print(Node* pTemp) {
    	 if (pTemp == NULL) {
    		 printf("\n--------------------您要查找的联系人不存在!--------------------------------\n");
    	 }
    	 else {
    		 printf("----------------------------------------------------------------------\n");
    		 printf("编号:%d\n", pTemp->id);
    		 printf("姓名:%s\n", pTemp->name);
    		 printf("年龄:%s\n", pTemp->age);
    		 printf("性别:%s\n", pTemp->sex);
    		 printf("手机号:%s\n", pTemp->phone);
    		 printf("住址:%s\n", pTemp->address);
    		 printf("----------------------------------------------------------------------\n");
    	 }
     }
    
     //添加联系人
    void AddNodeList()
    {
    	//创建一个节点
    	 Node* pTemp = (Node*)malloc(LEN);
    	//节点数据赋值
    	 printf("编号为%d\n", idnumber);
    	pTemp->id = idnumber;
    	printf("请输入姓名:");
    	scanf("%s", pTemp->name);
    	printf("\n");
    	printf("请输入年龄:");
    	scanf("%s", pTemp->age);
    	printf("\n");
    	printf("请输入性别:");
    	scanf("%s", pTemp->sex);
    	printf("\n");
    	printf("请输入手机号:");
    	scanf("%s", pTemp->phone);
    	printf("\n");
    	printf("请输入住址:");
    	scanf("%s", pTemp->address);
    	printf("\n");
    	pTemp->pNext = NULL;
    	//链接
    	if (NULL == phead)
    	{
    		phead = pTemp;
    		pend = pTemp;
    	}
    	else
    	{
    		pend->pNext = pTemp;
    		pend = pTemp;
    	}
    	system("pause");
    	system("cls");
    }
    
    //显示全部数据
    void ScanList()
    {
    	if (phead == NULL) {
    		printf("无任何联系人。\n");
    	} return;
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		print(pTemp);
    		pTemp = pTemp->pNext;
    	}
    	system("pause");
    	system("cls");
    }
    
    //查询指定节点(姓名)
    Node* SelectNode1(char xm[20])
    {
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		if (strcmp(xm,pTemp->name)==0)
    		{
    			return pTemp;
    		}
    		pTemp = pTemp->pNext;
    	}
    	//没找到
    	return NULL;
    }
    
    //查询指定节点(id)
    Node* SelectNode2(int id)
    {
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		if ((pTemp->id)==id)
    		{
    			return pTemp;
    		}
    		pTemp = pTemp->pNext;
    	}
    	//没找到
    	return NULL;
    }
    
    //查询指定节点(phone)
    Node* SelectNode3(char phone[20])
    {
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		if (strcmp(phone, pTemp->phone) == 0)
    		{
    			return pTemp;
    		}
    		pTemp = pTemp->pNext;
    	}
    	//没找到
    	return NULL;
    }
    
    //查询指定数据
    void Select()
    {
    	printf("1.按姓名查找\n");
    	printf("2.按编号查询\n");
    	printf("3.按手机号查找\n");
    	int index;
    	int b = 0;
    	scanf("%d", &index);
    	Node* pTemp = phead;
    	switch (index) {
    		//姓名查询
    	case 1:
    	{
    		char name[20];
    		printf("姓名:");
    		scanf("%s", name);
    		pTemp = SelectNode1(name);
    		print(pTemp);	
    	}break;
    	//编号查询
    	case 2:
    	{
    		int id = 0;
    		printf("编号:");
    		scanf("%d", &id);
    		pTemp = SelectNode2(id);
    		print(pTemp);
    	}break;
    	//手机号查询
    	case 3:
    	{
    		char phone[20];
    		printf("手机号:");
    		scanf("%s", phone);
    		pTemp = SelectNode3(phone);
    		print(pTemp);
    	}break;
    	}
    	system("pause");
    	system("cls");
    }
    
    //定向删除
    void DeleteListRand()
    {
    	
    	if (phead == NULL)
    	{
    		printf("链表为空!\n");
    		system("pause");
    		system("cls");
    		return;
    	}
    	printf("1.按姓名查找\n");
    	printf("2.按编号查询\n");
    	printf("3.按手机号查找\n");
    	int index, yn;
    	scanf("%d", &index);
    	Node* pTemp = phead;
    	switch (index) {
    		//姓名删除
    	case 1: {
    		char name[20];
    		printf("请输入删除的联系人姓名\n");
    		scanf("%s", name);
    		pTemp = SelectNode1(name);
    		print(pTemp);
    	}break;
    		//编号删除
    	case 2: {
    		int id = 0;
    		printf("请输入删除的联系人编号\n");
    		scanf("%d", &id);
    		pTemp = SelectNode2(id);
    		print(pTemp);
    	}break;
    		//手机号删除
    	case 3: {
    		char phone[20];
    		printf("请输入删除的联系人手机号\n");
    		scanf("%s", phone);
    		pTemp = SelectNode3(phone);
    		print(pTemp);
    	}break;
    	}
    	printf("确定删除以上联系人吗?(输入 1 确认删除,输入 0 退出该模块) : ");
    	scanf("%d", &yn);
    	if (yn == 0) {
    		system("cls");
    	}
    	//开始删除
    	else {
    		//只有一个节点(直接清空)
    		if (phead == pend)
    		{
    			free(phead);
    			phead = NULL;
    			pend = NULL;
    			printf("操作成功\n");
    			n--;
    			system("pause");
    			system("cls");
    			return;
    		}
    		//有两个(及以上)节点
    		else if (phead->pNext == pend)
    		{
    			if (phead == pTemp)
    			{
    				DeleteListHead();
    			}
    			else
    			{
    				DeleteListTail();
    			}
    		}
    		else
    		{
    			if (phead == pTemp)
    			{
    				DeleteListHead();
    			}
    			else if (pend == pTemp)
    			{
    				DeleteListTail();
    			}
    			else
    			{
    				//找到删除节点的前一个节点
    				Node* pT = phead;
    				while (pT->pNext != pTemp)
    				{
    					pT = pT->pNext;
    				}
    				//成功找到后
    				pT->pNext = pTemp->pNext;
    				free(pTemp);
    			}
    
    		}
    		printf("操作成功\n");
    		n--;
    		system("pause");
    		system("cls");
    	}
    }
    
    //头删除
    void DeleteListHead()
    {
    	if (phead == NULL)
    	{
    		printf("链表为空!\n");
    		return;
    	}
    		Node* pTemp = phead;
    		phead = phead->pNext;
    		free(pTemp);
    }
    
    //尾删除
    void DeleteListTail()
    {
    	if (NULL == phead)
    	{
    		printf("链表为空!\n");
    		return;
    	}
    	//链表有一个节点
    	if (phead == pend)
    	{
    		free(phead);
    		phead = NULL;
    		pend = NULL;
    	}
    	else
    	{
    		//找到最后一个节点的前一个节点
    		Node* pTemp = phead;
    		while (pTemp->pNext != pend)
    		{
    			pTemp = pTemp->pNext;
    		}
    		free(pend);
    		pend = pTemp;
    		pend->pNext = NULL;
    	}
    }
    
    //条件排序
    void SortList()
    {
    	int choose;
    	printf("1.按年龄排序\n");
    	printf("2.按编号排序\n");
    	printf("3.按姓名排序\n");
    	printf("4.按手机号排序\n");
    	scanf("%d", &choose);
    	Node* pTemp = phead;
    	Node p[99] = { 0 };
    	//先把储存的节点头地址都放在数组中等待排序
    	for (int i = 0; i < n&&pTemp!=NULL; i++)
    	{
    		p[i] = *pTemp;
    		pTemp = pTemp->pNext;
    	}
    	switch (choose)
    	{
    	  //按年龄排序
    	  case 1:
    	  {
    		  //选择排序法
    		  for (int i = 0; i < n ; i++)
    		  {
    			  for (int j = 1; i+j< n; j++)
    			  {
    				  if (strcmp(p[i].age , p[ i+j ].age) > 0)
    				  {
    					  Node pt = p[i];
    					  p[i] = p[i + j];
    					  p[i + j] = pt;
    				  }
    			  }
    		  }
    		  break;
    	  }
    	  //按编号排序
    	   case 2:
    	   { 
    		   for (int i = 0; i < n; i++)
    		   {
    			   for (int j = 1; i + j < n; j++)
    			   {
    				   if (p[i].id == p[i + j].id)
    				   {
    					   Node pt = p[i];
    					   p[i] = p[i + j];
    					   p[i + j] = pt;
    				   }
    			   }
    		   }
    		   break;
    	   }
    	   //按姓名排序
    	   case 3:
    	   {
    		   //选择排序法
    		   for (int i = 0; i < n; i++)
    		   { 
    			   for (int j = 1; i + j < n; j++)
    			   {
    				   if (strcmp(p[i].name , p[i + j].name) > 0)
    				   {
    					   Node pt = p[i];
    					   p[i] = p[i + j];
    					   p[i + j] = pt;
    				   }
    			   }
    		   }
    		   break;
    	   }
    	   //按手机号排序
    	   case 4:
    	   {
    		   //选择排序法
    		   for (int i = 0; i < n; i++)
    		   {
    			   for (int j = 1; i + j < n; j++)
    			   {
    				   if (strcmp(p[i].phone, p[i + j].phone) > 0)
    				   {
    					   Node pt = p[i];
    					   p[i] = p[i + j];
    					   p[i + j] = pt;
    				   }
    			   }
    		   }
    		   break;
    	   }
    	}
    	system("cls");
    	printf("排序完成!\n");
    	printf("排序后结果为:\n");
    	for (int i = 0; i < n; i++)
    	{
    		printf("编号:%d\n", p[i].id);
    		printf("姓名:%s\n", p[i].name);
    		printf("年龄:%s\n", p[i].age);
    		printf("性别:%s\n", p[i].sex);
    		printf("手机号:%s\n", p[i].phone);
    		printf("住址:%s\n", p[i].address);
    		printf("\n");
    	}
    	system("pause");
    	system("cls");
    }
    
    //链表清空
    void FreeList()
    {
    	int yn = 1;
    	printf("确定清空联系人吗?(输入 1 确认清空,输入 0 退出该模块) : ");
    	scanf("%d", &yn);
    	if (yn == 0) {
    		system("cls");
    	}
    	Node* pTemp = phead;
    	while (pTemp != NULL)
    	{
    		Node* pt = pTemp;
    		pTemp = pTemp->pNext;
    		free(pt);
    	}
    	phead = NULL;
    	pend = NULL;
    	printf("已全部清除\n");
    	n = 0;
    	idnumber = 0;
    	system("pause");
    	system("cls");
    }
    
    //打印菜单
    void showmenu()
    {
    	printf("--------------------《通讯录管理系统菜单》--------------------\n");
    	printf("-------------------1.新建联系人-------------------------------\n");
    	printf("-------------------2.显示全部信息-----------------------------\n");
    	printf("-------------------3.查询指定联系人---------------------------\n");
    	printf("-------------------4.删除指定联系人---------------------------\n");
    	printf("-------------------5.修改指定联系人---------------------------\n");
    	printf("-------------------6.排序全部联系人---------------------------\n");
    	printf("-------------------7.清空全部联系人---------------------------\n");
    }
    
    //修改联系人信息
    void change() {
    	int yn, choose;
    	printf("1.按编号查找\n");
    	printf("2.按姓名查找\n");
    	printf("3.按手机号查找\n");
    	int index;
    	int b = 0;
    	scanf("%d", &index);
    	Node* pTemp = phead;
    	switch (index) {
    	case 1:
    	{
    		int id = 0;
    		printf("编号:");
    		scanf("%d", &id);
    		pTemp = SelectNode2(id);
    	}break;
    	case 2:
    	{
    		char name[20];
    		printf("姓名:");
    		scanf("%s", name);
    		pTemp = SelectNode1(name);
    	}break;
    	case 3:
    	{
    
    		char phone[20];
    		printf("手机号:");
    		scanf("%s", phone);
    		pTemp = SelectNode3(phone);
    	}break;
    	default:return;
    	}
    	print(pTemp);
    	printf("确定修改以上联系人吗?\n(输入 1 进入修改,输入 0 退出该模块) : ");
    	scanf("%d", &yn);
    	if (yn == 1)
    	{
    		printf("1.姓名    2.年龄    3.性别    4.手机号    5.住址\n请输入序号:");
    		scanf("%d", &choose);
    		switch (choose)
    		{
    		case 1: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->name);
    			printf("修改成功\n");
    		}break;
    		case 2: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->age);
    			printf("修改成功\n");
    		}break;
    		case 3: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->sex);
    			printf("修改成功\n");
    		}break;
    		case 4: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->phone);
    			printf("修改成功\n");
    		}break;
    		case 5: {
    			printf("请输入新值:");
    			scanf("%s", pTemp->address);
    			printf("修改成功\n");
    		}break;
    		}
    		system("pause");
    		system("cls");
    	}
    	system("cls");
    }

     

    展开全文
  • 里面有老师的要求,格式,总流程图,每个函数的N-S图,心得总结和源代码,适合将要上交作业的同同学.
  • 王俊杰 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》...它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式

    王俊杰 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》:

    MOOC课程http://mooc.study.163.com/course/USTC-1000002006

    一、 前言

    软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用都促进了经济和社会的发展,也提高了工作和生活效率 。同时,软件工程师研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件的一门科学,代码的设计不单单是为了使程序可运行,可实现需要的功能,在代码的规范,设计的规范,模块化思想,线程的安全性,子系统的可重用性上都有所要求。而这门软件工程线上课程(c语言实践篇)正是侧重代码的规范和设计的规范性。

    二、心得体会

    学习完这门课,我对软件设计开发有了一个新的认识,以前总认为软件就是写程序,开发软件项目就是大家一起写程序,然后拼在一起实现最后的功能,但现在,通过8周的学习,我了解到软件开发远比单单写程序来更高端,更复杂。
    课程一开始就介绍了在编码中需要注意的许多事项,比如代码应具有良好的可读性,对变量和函数的命名都应该有严格的规范,同时遵循一种统一的风格,良好的代码风格能够省去不必要的注释,让代码更“漂亮”,同时易于他人阅读。紧接着,实验从最熟悉的hello word开始,当然,这个实验主要是让我们先了解实验环境,了解代码规范的一些基础内容,为后面的学习打基础。接着一步一步地添加功能,不知不觉将命令行菜单的一个小程序慢慢地变成了一个命令行的小系统。
    在逐步求精的过程中,同时注意代码的重用性,将可重用的代码模块化,以供其它模块使用,而不必在每次使用时重新编写。整个实验过程中,老师多次强调代码规范问题,促使我们养成良好的代码编写习惯。

    三、实验内容及报告

    实验一: 写一个helloword程序

    在实验楼Linux环境使用C语言编写,编译后执行输出"Hello,World!";
    实验和实验报告务必在实验楼linux下完成,课程视频是在本地虚拟机上操作的,除了目录环境和作业提交方式不同外,基本的命令和编辑操作方式是一致的。
    

    实验二: 命令行菜单小程序V1.0

    实现一个命令行的菜单小程序,执行某个命令时调用一个特定的函数作为执行动作,实现的命令个数不少于8个;
    类似ftp的help目录或者bash的help目录;
    程序循环、接收用户的命令,如help、others等命令;
    可以广泛通用的命令行菜单子系统组件,可方便地定制而嵌入到其他系统。
    

    实验三: 内部模块化的命令行菜单小程序V2.0

    注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑和菜单数据存储
    要求:1)遵守代码风格规范,参考借鉴代码设计规范的一些方法;2)代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件。
    

    实验四: 用可重用的链表模块来实现命令行菜单小程序V2.5

    用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作;
    链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变;
    可以将通用的Linktable模块集成到我们的menu程序中;
    接口规范;
    

    实验五: 用callback增强链表模块来实现命令行菜单小程序V2.8

    给lab5-1.tar.gz(在实验楼Linux虚拟机环境下~/se_files/目录下)找bug,quit命令无法运行的bug
    利用callback函数参数使Linktable的查询接口更加通用
    注意接口的信息隐藏
    

    实验六(测验): 函数的可重入性(reentrant)及线程安全

    实验七: 将menu设计为可重用的子系统

    为menu子系统设计接口,并写用户范例代码来实现原来的功能;
    使用make和make clean来编译程序和清理自动生成的文件;
    使menu子系统支持带参数的复杂命令,并在用户范例代码中自定义一个带参数的复杂命令;
    可以使用getopt函数获取命令行参数。
    

    四、总结

    这门课程使我获益良多,让我对软件工程有了初步的认识,遗憾是课时有点少,没有能更深入的了解。通过实验楼的学习,我知道课堂上学到的知识是有限的,在这个网络发达的时代,只要我们够努力,肯花时间去努力去钻研,不断学习,最终一定可以学到更多知识。谢谢网易云课堂平台!

    展开全文
  • 航空订票系统 课程设计 文章末尾有完整文档(字数接近4000)和源码下载 目录 一、课题的主要功能. 1.1设计目的. 1.2 设计要求. ...4.2 课程设计过程心得体会 参考文献. 附录 省略几千字 ...

    航空订票系统 课程设计

     文章末尾有完整文档(字数接近4000)和源码下载

    目录

    一、课题的主要功能.

    1.1设计目的.

    1.2  设计要求.

    1.3 课题的主要功能

    1.4 基本思路.

     

    二、课题的功模块的划分.

    2.1程序的模块组成.

    2.2程序流程图.

    2.3功能模块的介绍.

    2.4数据结构.

     

    三、程序运行的主要步骤,调试结果

    四.总结.

    4.1 程序调试中遇到的问题以及解决问题的方法

    4.2 课程设计过程心得体会

    参考文献.

    附录


    省略几千字


     

    部分内容

    课题的主要功能

    1. 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
    2. 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
    3. 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
    4. 退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
    5. 修改航班信息:当航班信息改变可以修改航班数据文件
    6. 人机界面自定义,要友好。
    7. 汉化人机界面

    程序的模块组成

     

     

    系统流程图

    资源下载

    完整的文档和源码:https://download.csdn.net/download/frank2102/14935427

    展开全文
  • 20165316 2017-2018-2《Java程序设计课程总结 一、每周作业链接汇总 1. 预备作业一:我期望的师生关系 20165316 我期望的师生关系 摘要: 典型老师 师生关系 关于课程 2. 预备作业二:学习基础和C语言基础调查 ...
  • 20165208 2017-2018-2《Java程序设计课程总结 每周博客链接汇总 预备作业1:我期望的师生关系 内容概括: 我印象深刻的老师 感想 关于C语言 预备作业2:读文章有感及学习基础与C语言基础综述 简要内容: 心得...
  • 20165334 2017-2018-2《Java程序设计课程总结 一、每周作业链接汇总 预备作业1:我期待的师生关系 预备作业:学习基础与c语言学习心得 预备作业3: Linux及学习 第一周作业:《Java程序设计》第1周学习总结 第二周...
  • 20165105 2017-2018-2《Java程序设计课程总结 每周作业链接汇总 预备作业1:我期待的师生关系 预备作业:学习基础与c语言学习心得 预备作业3: Linux及学习 第一周作业:《Java程序设计》第1周...
  • 20165301 2017-2018-2《Java程序设计课程总结 每周作业链接汇总 预备作业1:我期待的师生关系 预备作业2:学习基础与c语言学习心得 预备作业3: Linux安装及命令入门 第一周作业:《Java程序设计》第1周学习总结 第...
  • 20165320 2017-2017-2《Java程序设计课程总结 一、每周作业链接汇总 1、我期待的师生关系 20165320 我期望的师生关系 2、学习基础和C语言基础调查 20165320 预备作业2:技能学习心得C语言学习 3、linux安装及...
  • 20165324 2017-2018-2 《Java程序设计课程总结 每周作业链接汇总 预备作业1:20165324 我期望的师生关系 预备作业2:20165324 学习基础与C语言学习心得 预备作业3:20165324 预备作业三 第一周作业:20165324...
  • 20165215 2017-2018-2《Java程序设计课程总结 一、每周作业链接汇总 预备作业1:我期望的师生关系:令我记忆深刻的老师,期望的师生关系,本学期的学习规划。 预备作业二:学习基础和C语言基础调查:《做中学》读...
  • 一、每周作业链接汇总 ...20165115 C语言学习心得 摘要: 学习技能的经验 C语言学习情况调查 阅读PPT提出问题 Java学习的目标与途径 3.预备作业三:Linux安装及学习 20165115 预备作业3 Linux安装...
  • 预备作业2:20165323 学习基础与C语言学习心得 预备作业3:20165323 预备作业三 第一周作业:20165323《Java程序设计》第一周 第二周作业:20165323《Java程序设计》第二周 第三周作业:20165323《Java程序设计》第...
  • c++程序设计心得体会 - ui设计心得体会与总结 c++程序设计心得体会一...虽然在上个学期中我们已经学习了C语言程序设计这门课但是我所学的知识最多也就是在做作业的时候才会用到平时没有什么练习的机会这次的课程设计
  • 本书的特色之处是强调实际嵌入式软件项目中常用的技巧和方法,并融合了作者在所从事的科研项目中总结出来的经验和心得。本书适合电子类专业本科高年级和相关专业硕士的教学,可以作为相关选修课程的教材或主要参考...
  • c学生成绩管理系统.rar 这次的课程设计和以往写的程序比起来,无论是在篇幅和复杂度上都提高了不少,我在写这个...希望我能在这次课程设计的基础上,继续学习更多的C语言的知识,使自己的编程能力更上一层楼。
  • 声明:本文做笔记使用,引用李雨桐老师的文字地方有引用说明,...因为菜,基于本人毕业设计的原因,需要了解Alios things的使用,但是看着一个个陌生的文件,一段段陌生的代码,以及似曾相识的C语言(这TM怎么和我...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

c语言课程设计总结心得

c语言 订阅