/*********************************
Project: 学生信息管理系统
Writer: SHOW
Time: 2011/12/25
Function: 通过链表可以任意添加学生信息,查找学生信息,删除学生信息,显示所有学生信息,按各科成绩对学生进行排序。
涉及知识点:1.单链表的插入,删除,查找
2.二级指针,及初始化问题
版本:2.0
1. 结构中新加了语文,数学,英语成绩。并且可以按三门成绩对学生信息进行排序,也就是Sort_Node对节点进行排序
2. 解决了版本1.0留下的问题 1。原因是因为在主函数里没有把*phead 根指针赋予NULL。而是(*phead) -> next =NULL,
这样程序一开始就插入了头结点。
*********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
/* 定义一个学生信息的结构 */
typedef struct address{
char name[8];
char tel[20];
int chinese;
int math;
int english;
struct address *next;
int num;
}ADDR;
//========================================================================
// 函数说明: 单链表插入节点函数
// 实现功能: 能在任意位置插入节点,参考C和指针的经典写法
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针。
// new_num: 为插入的序号,提供有序插入的信息。
// 返回值: 无
//========================================================================
void Insert_Node(ADDR **phead,int new_num,char name[],char tel[],int chinese,int math,int english)
{
ADDR *current;
ADDR *newnode;
while( (current = *phead) != NULL && current -> num <= new_num)
phead = ¤t -> next;
newnode = (ADDR*)malloc(sizeof(ADDR));
/* 插入的学生信息 */
strcpy(newnode -> name,name);
strcpy(newnode -> tel,tel);
newnode -> num = new_num;
newnode -> chinese = chinese;
newnode -> math = math;
newnode -> english = english;
/*******************/
newnode -> next = current;
*phead = newnode;
}
//========================================================================
// 函数说明: 单链表查找节点函数,
// 实现功能: 通过传入的序号找到该节点并返回节点指针
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针。
// seek_num: 需要查找的序号
// 返回值: 如果找到了节点,则返回该节点,遍历后没有找到返回NULL
//========================================================================
ADDR* Seek_Node(ADDR **phead,int seek_num)
{
ADDR *current;
while( (current = *phead) != NULL && current -> num != seek_num)
{
phead = ¤t -> next;
}
if(current == NULL)
return NULL;
if(current -> num == seek_num)
return current;
else
return NULL;
}
//========================================================================
// 实现功能: 单链表删除节点函数,通过传入的数据域seek_num序号,删除对应节点。
// 函数说明: 此写法参考尚观C视频教程写法,删除后必须把该节点的前一个节点指向后一节点,要不然链表就乱了。
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针。
// new_num: 为删除的序号
// 返回值: 删除成功返回头结点*phead,反之返回NULL。
//========================================================================
ADDR* Delete_Node(ADDR **phead,int seek_num)
{
ADDR *p,*q;
if(*phead == NULL)
return NULL;
else if((*phead) -> num == seek_num)
{
p= *phead;
*phead = (*phead) -> next;
}
else
{
p = *phead;
while((p -> num != seek_num) && (p -> next != NULL))
{
q = p;
p = p-> next;
}
if(p -> num != seek_num)
return NULL;
else
{
q -> next = p -> next;
free(p);
}
}
return *phead;
}
//========================================================================
// 函数说明: 单链表获取节点长度函数
// 实现功能: 通过遍历整个链表只要没到尾部 lengh++。
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针。
// 返回值: 返回节点个数
//========================================================================
int Get_NodeLengh(ADDR **phead)
{
ADDR *current;
int lengh = 0;
while( (current = *phead) != NULL)
{
lengh ++;
phead = ¤t -> next;
}
return lengh;
}
//========================================================================
// 函数说明: 单链表数据域排序函数
// 实现功能: 运用冒泡排序算法进行排序,但只是移动了数据的位置,而没有对节点进行移动。
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针。
// score:为需要进行排序的数据域值
// 返回值: 返回根指针
//========================================================================
/*ADDR* Sort_Node_Data(ADDR **phead,int score)
{
ADDR *p;
int n,m,lengh,temp;
lengh = Get_NodeLengh(phead);
p = *phead;
for( n=0; n<=lengh; n++)
{
p = *phead;
for(m=0; m<(lengh - n); m++)
{
if(p->score > p->next->score)
{
temp = p -> score;
p -> score = p -> next -> score;
p -> next -> score = temp;
}
p = p -> next;
}
}
return *phead;
}*/
//========================================================================
// 函数说明: 单链表节点排序函数
// 实现功能: 对节点进行排序,移动节点的位置
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针
// 返回值: 返回根指针
//========================================================================
ADDR* Sort_Node(ADDR **phead,char flag)
{
ADDR *p,*q,*t,*s,*h;
h=(ADDR *)malloc(sizeof(ADDR));
h->next=*phead;
p=h;
if((*phead) -> next == NULL)
return NULL;
while(p->next->next!=NULL)
{
for(s=p,q=p->next;q->next!=NULL;q=q->next)
{
switch(flag)
{
case 'n':
if(q->next->num < s->next->num)
s = q;
break;
case 'c':
if(q->next->chinese<s->next->chinese)
s=q;
break;
case 'm':
if(q->next->math<s->next->math)
s=q;
break;
case 'e':
if(q->next->english<s->next->english)
s=q;
break;
default: break;
}
}
if(s!=q)
{
t=s->next;
s->next=t->next;
t->next=p->next;
p->next=t;
}
p=p->next;
}
*phead=h->next;
free(h);
return *phead;
}
/* 函数声明 */
void InputStudent(ADDR **phead);
void DisplayAllStudent(ADDR **phead);
void SeekStudent(ADDR **phead);
void MenuSelect(void);
void HandleMenu(ADDR **phead);
void DeleteStudent(ADDR **phead);
void SortStudent(ADDR **phead);
/* 用带参数的宏分配内存 */
#define ASK(top) do{\
top=(ADDR *)malloc(sizeof(ADDR));\
if(top==NULL){printf("memory fail!");}\
}while(0);
/* 主函数 */
int main(void)
{
ADDR **phead; // 定义一个二级指针
ADDR *Temp;
ASK(Temp);
phead = &Temp; // 必须先给指针初始化内存,不然程序果断崩溃 ,也是自己用指针经常犯的错误谨记 ¥¥¥¥¥
memset(*phead,NULL,sizeof(ADDR));
(*phead) = NULL;
while(1)
{
HandleMenu(phead);
}
return 1;
}
//========================================================================
// 函数说明: 添加学生信息子函数
// 实现功能: 添加一个学生信息,添加一个节点。学生信息通过scanf函数从控制台输入
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针。
// 返回值: 无
//========================================================================
void InputStudent(ADDR **phead)
{
int num;
char name[8];
char tel[20];
int chinese,math,english;
printf(" --- 请输入新加入学生信息: ---\n");
while(1)
{
printf("学号:");
scanf("%d",&num);
printf("姓名:");
scanf("%s",name);
printf("电话号码:");
scanf("%s",tel);
printf("语文:");
scanf("%d",&chinese);
printf("数学:");
scanf("%d",&math);
printf("英语:");
scanf("%d",&english);
Insert_Node(phead,num,name,tel,chinese,math,english);
printf("任意键继续添加信息,输入0 返回\n");
if(getch() == '0')
break;
else
continue;
}
}
//========================================================================
// 函数说明: 显示所有学生信息子函数
// 实现功能: 遍历整个链表,把所有链表信息都打印出来
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针
// 返回值: 无
//========================================================================
void DisplayAllStudent(ADDR **phead)
{
ADDR *current;
/* 只要不为NULL,也就是没到尾部。那么找到的节点则都为先前插入的节点,也就是肯定存在信息的*/
while( (current = *phead) != NULL )
{
printf("学号:%d,姓名:%s,电话号码:%s,语文:%d,数学:%d,英语:%d\n",
current -> num,current -> name,current -> tel,current -> chinese, current -> math, current -> english);
phead = ¤t -> next;
}
}
//========================================================================
// 函数说明 查找学生信息子函数
// 实现功能: 通过键盘输入命令,判断查找单个学生还是所有学生信息。
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针
// 返回值: 无
//========================================================================
void SeekStudent(ADDR **phead)
{
int num;
char name[20];
char tel[100];
ADDR *temp_node;
printf("--- 任意键查找单个学生信息,查找所有学生信息请输入 a ---\n");
if(getch() == 'a')
{
DisplayAllStudent(phead);
printf("返回请输入 0\n");
/* 这里用while也是因为返回有清屏操作,为了让控制台显示所有同学信息,所以要先停在这里。*/
while(1)
{
if(getch() == '0')
break;
}
}
else
{
while(1)
{
printf("学号:");
scanf("%d",&num);
temp_node = Seek_Node(phead,num);
if(temp_node == NULL)
{
printf("输出错误不存在此学号, 请重新输入 ,输入 0 返回\n");
if(getch() == '0')
break;
else
continue;
}
else
{
printf("该学生信息为 -> 学号:%d,姓名:%s, 电话号码:%s,语文:%d,数学:%d,英语:%d\n",
temp_node -> num,temp_node -> name,temp_node -> tel,temp_node -> chinese,temp_node -> math,temp_node -> english );
printf("输入任意键继续查找,输入0 返回\n");
if(getch() == '0')
break;
else
continue;
}
}
}
}
//========================================================================
// 函数说明 学生信息排序子函数
// 实现功能:
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针
// 返回值: 无
//========================================================================
void SortStudent(ADDR **phead)
{
int score;
char ch;
printf("按学号,语文,数学,英语排序请分别输入n, c , m , e 返回请输入 0 \n");
while(1)
{
ch = getch();
if(ch == '0')
break;
else
{
switch(ch)
{
case 'n':
printf("按学号排序结果如下:\n");
break;
case 'c':
printf("按语文成绩排序结果如下:\n");
break;
case 'm':
printf("按数学成绩排序结果如下:\n");
break;
case 'e':
printf("按英语成绩排序结果如下:\n");
break;
default: break;
}
Sort_Node(phead,ch);
DisplayAllStudent(phead);
printf("\n");
}
}
}
//========================================================================
// 函数说明: 删除学生信息子函数
// 实现功能: 通过scanf从控制台输入需要删除的学号,再调用对应Delete_Node函数删除对应学号的节点
// 入口参数: phead:指向头结点的指针的指针,也就是指向根指针的指针
// 返回值: 无
//========================================================================
void DeleteStudent(ADDR **phead)
{
int num;
char ch;
printf("--- 删除单个学生信息请输入 s,删除所有学生信息请输入 a / A ---\n");
ch = getch();
if(ch == 's')
{
while(1)
{
printf("学号:");
scanf("%d",&num);
if(Delete_Node(phead,num) == NULL)
{
printf("输入错误,不存在此学号,请重新输入,输入 0 返回\n");
if(getch() == '0')
break;
else
continue;
}
else
{
printf("任意键删除下一个,输入 0 返回\n");
if(getch() == '0')
break;
else
continue;
}
}
}
else if(ch == 'a' || ch == 'A')
{
(*phead) = NULL; // 直接给根指针NULL
}
}
/* 菜单子函数 */
void MenuSelect(void)
{
printf("*******************************学生信息管理系统*********************************\n");
printf(" 添加学生信息请输入 1 删除学生信息请输入 2 \n");
printf(" 查找学生信息请输入 3 对成绩排序请输入 4 \n");
printf("********************************************************************************\n");
}
/* 处理菜单子函数 */
void HandleMenu(ADDR **phead)
{
char ch;
system("cls"); //调用系统命令清屏操作
MenuSelect();
ch = getch();
switch(ch)
{
case '1': InputStudent(phead);
break;
case '2': DeleteStudent(phead);
break;
case '3': SeekStudent(phead);
break;
case '4': SortStudent(phead);
break;
default : break;
}
}相关推荐
C语言实现的学生信息管理系统课程设计及实验报告
学生信息管理系统旨在为教育机构提供一个集中化管理学生数据的平台。该系统需要能够高效地处理学生的基本信息、成绩、课程安排等数据。系统的核心目的是减少人工处理数据的时间,提高数据处理的准确性和安全性,同时能够快速响应学校管理层和学生的查询需求。该系统一般包含以下功能模块:- 学生信息录入与维护- 成绩管理- 课程安排与查询- 报表生成功能- 用户权限与安全管理文件操作是每个软件系统都必须处理的基本任务,无论是在数据存储、读取还是备份方面。
学生信息管理系统——C语言版
学生信息管理系统
基于C语言的学生信息管理系统课程设计与实现
在构建学生信息管理系统时,首要任务是设计一个能够准确反映现实世界实体的数据模型。这个模型的核心载体就是结构体。它不仅决定了数据的存储方式,还影响着后续所有操作函数的设计逻辑。合理的结构体设计应当兼顾语义清晰性、内存效率以及未来扩展的可能性。在学生信息管理中,单向链表是最常用的变体之一。每个节点包含学生数据和指向下一节点的指针,形成一条单向链条。// 存储学生信息// 指向下一个节点初始状态为空链表(头指针为NULL),随着学生加入,不断创建新节点并通过指针串联起来。
C语言实现--学生信息管理系统+附详细代码分析过程
本文将会用c语言实现一个学生信息管理系统,并且存储若干人的信息,每个人的信息包括:姓名,性别,年龄,电话号码,住址。此学生信息管理系统的功能包括: 1.增加学生 2.删除对应的学生 3.查找学生 4.修改学生的信息 5.排序此学生信息管理系统 6.打印出学生信息管理系统每个人的信息
C语言基础课程设计:简易学生信息管理系统
除了依赖标准库函数的错误处理,我们还需要编写自定义的错误处理代码。这通常包括定义错误码、处理逻辑以及错误恢复策略。// 处理文件未找到的错误break;// 处理文件打开失败的错误break;default:// 处理其他未知错误if (result!在编写自定义错误处理代码时,需要考虑错误码的唯一性、错误处理的全面性和错误恢复的可能性。测试自定义错误处理代码时,应模拟不同的错误情况,并验证错误处理逻辑是否按预期执行。
深交所 vs 上交所:Level-2实时数据推送规则详解与策略适配指南
本文深度解析沪深Level-2实时数据推送规则的关键差异,包括逐笔成交、逐笔委托和10档行情接口的处理逻辑。针对高频交易策略,详细对比上交所与深交所在数据推送机制、时间戳处理及委托队列解析等方面的差异,并提供具体的策略适配方案和性能优化建议,帮助量化投资者提升跨市场交易稳定性。
C语言学生信息管理系统
用户界面: - 提供一个简洁的文本界面,用户可以通过键入命令或选择选项来执行不同的操作。 - 用户可以方便地选择要执行的操作,例如添加、查询、编辑、删除学生信息或显示所有学生信息。 2. 学生信息记录: - 用户可以录入学生的基本信息,如学号、姓名、年龄、性别、班级等。 - 学生信息应存储在内存中,在程序周期内可进行操作。
机器学习——笔记整理(原理、python代码)——反反复复,出精活!
回顾知识,检查自我,开拓新域。 机器学习1.监督学习 机器学习简介: 机器学习是实现人工智能的手段,其主要研究内容是如何利用数据或经验进行学习,改善具体算法的性能。 多领域交叉,涉及概率论、统计学,算法复杂度理论等多门学科 广泛应用于网络搜索、垃圾邮件过滤、推荐系统、广告投放、信用评价、欺诈检测、股票交易和医疗诊断等应用。 机器学习分类: 机器学习一般分为下面几种类别 监督学习 ( Supervised Learning) 无监督学习 ( Unsupervised Learning) 强化学习(
C语言课程设计——学生信息管理系统
学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)---输入 学生信息浏览功能——输出 查询、排序功能——算法 1、按学号查询 2、按姓名查询 学生信息的删除与修改(可选项) (2)功能要求 界面简单明了; 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; 最好用链表...
【AIGC】COT思维链:让AI学会拆解问题,像人一样思考
COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。
LangChain实战:用FAISS搭建本地文档问答系统(含Word文件处理避坑指南)
本文详细介绍了如何利用LangChain框架和FAISS向量数据库构建本地化智能文档问答系统,特别针对Word文档处理中的技术难点提供实用解决方案。通过模块化设计、本地化支持和多格式兼容,实现高效文档处理与精准问答,满足企业对数据隐私和安全的需求。
基于C语言的学生信息管理系统开发
程序设计基础课程设计---基于C语言的学生管理软件开发
STM32 烧录报错Invalid ROM Table
STM32 烧录报错Invalid ROM Table
C语言学生信息管理系统详细设计
学生信息管理系统 授权协议: 允许对本文提供的任何信息、资料进行使用、学习、修改等,但请注明引用出处。(白tom: qq1005252070) 1. 问题定义 1.1. 概述 不论是在校计算机专业的学生还是刚步入IT行业从事C工作的毕业生,对于C语言的基础考核,学生管理系统则作为不二的选择。该项目不论从难易程度还是知识考核点都易于被接受。 1.2. 需求分析 基于以上学生管理系统动图...
29、几何形态测量学在蝴蝶翅膀研究中的应用
本博客介绍了几何形态测量学在花斑木蛱蝶(Pararge aegeria)翅膀研究中的应用,探讨了环境因素对蝴蝶翅膀大小和形状的影响。通过选择合适的地标并采用Procrustes分析方法,研究揭示了不同景观类型下翅膀形状的差异及其潜在的适应性意义。文章还讨论了发育可塑性在飞行形态变异中的作用,并比较了几何形态测量学与其他传统方法的优势。最后提出了未来研究方向,包括多因素综合分析、发育机制探索及长期生态监测,为理解蝴蝶的适应性进化提供了重要线索。
MIPI RFFE 信号完整性与硬件设计
MIPI RFFE信号完整性设计关键点 摘要:MIPI RFFE作为射频前端控制总线,其信号完整性设计需平衡速率、驱动能力与抗干扰性。核心挑战在于确保接收端在52Mb/s速率下保持足够的电压和时序裕量。关键设计考量包括: 驱动能力优化:过强导致过冲/振铃和射频杂散,过弱则恶化时序裕量,需与总线负载匹配。 波形质量指标:严格控制上升/下降时间(兼顾EMC和时序要求),抑制过冲/振铃幅度,管理VIO电源纹波和耦合噪声。
学生信息管理系统 C语言程序设计
1 实践项目 本课程我们学习了Linux C程序设计,学习在Linux系统下使用C语言编程。那么,我们就可以使用C语言来开发应用程序。 我们使用C语言来开发一个“学生信息管理系统”,可以管理学生的信息。 那么,在这个软件系统中,我们要充分使用C语言的各个知识点,加深对C语言编程的学习。所以,我们列举几个需要实践操作的知识点: 函数的使用,对软件功能模块进行划分,不同的功能使用不同的函数来定义; 源文件和头文件的使用;不同的功能模块,使用不同的文件来封装; 结构体的使用,使用结构体来定义操作的对象
Isaac Lab & GR00T N1 入门教程(七)人形机器人推理与技能学习策略基准测试
本文介绍了IsaacLab设计的工业机器人操作评估系统,包含两项任务:螺母倾倒(成功率91%)和排气管分拣(成功率95%)。系统支持通过IsaacGR00TN1模型进行策略闭环评估,提供完整的开发环境配置指南(需Ubuntu22.04、CUDA12.8等环境),数据集下载方式(HuggingFace平台托管),以及模型微调流程。评估支持并行化测试(建议10-30个并行环境),并给出详细硬件配置建议(推荐RTX A6000 Ada显卡)。文档还包含常见问题解决方案,特别说明当前暂不支持Blackwell GP
大一c语言学生信息管理系统课程设计
效果图如下:下载地址:http://download.youkuaiyun.com/download/qq_36326947/9974229地址好像错了:http://download.youkuaiyun.com/download/qq_36326947/9984118
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
c语言学生信息管理系统设计报告,C语言学生信息管理系统实验报告 -.docx
C语言课程设计学生信息管理系统姓 名 洪伟生院 系 计 算 机 学 院日 期 2015 年 7 月 5 日目 录设计要求 ………………………………………………算法分析理论依据…………………………………………………主要实现方法……………………………………………整体流程图………………………………………函数功能和函数之间的调用关系………………代码(源代码)………………...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
学生信息的c语言程序设计,c语言程序设计报告-学生信息管理系统
《c语言程序设计报告-学生信息管理系统》由会员分享,可在线阅读,更多相关《c语言程序设计报告-学生信息管理系统(16页珍藏版)》请在人人文库网上搜索。1、中南大学C语言程序设计实践报告题 目 学生信息管理系统 学生姓名 张眼 指导教师 刘伟荣 学 院 信息科学与工程学院 专业班级 电气信息1113班 完成时间 2012年6月28日星期四 1.设计任务及设计目标学生信息管理系统是基于系统主菜单的操作...
C语言程序与设计之《学生信息管理系统》
该系统的整体设计为:用多文件结构使得业务功能清晰明了,采用数据文件的方式来存储系统所处理的数据,程序开头设有主菜单,使用户通过登录功能进入不同的用户系统,同时还在每个菜单界面加入了清屏功能,使得程序运行后的界面更加美观简洁。程序的开头,是一个菜单界面,供用户进行登录,并通过登录进入不同的用户系统,登录的过程中,会对用户输入的密码进行隐藏,显示为*号。教师系统包括查看学生成绩、录入学生成绩、修改学生成绩、删除学生成绩、排序学生成绩等功能,可以更方便地对学生的成绩进行分析。
学生信息管理系统c语言讲解,学生信息管理系统C语言课程设计讲解.doc
课 程 设 计 报 告课程名称 C语言程序设计课题名称 学生信息管理系统专 业 机械班 级 02学 号 20姓 名 刘某某指导教师 肖伟平 何宏 郭芳2012年 12 月 19 日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计课 题 ...
c语言程序设计课程设计学生信息管理系统,C语言程序设计课程设计报告----学生信息管理系统.doc...
河南理工大学计算机学院《C语言程序设计》课程设计报告题目: 学生信息管理系统专业: 计算机科学与技术班级: 计算机XX班学号: 311009033232姓名: *****日期:2012年3月21日1.2意义熟悉C语言程序的编程环境、熟练应用Visual C++ 6.0进行C语言编程、纠正、改错、运行。掌握C语言的所有数据类型,熟练的...
课程设计报告c语言总体设计方案,学生信息管理系统C语言课程设计报告方案.doc...
学生信息管理系统C语言课程设计报告方案课 程 设 计 报 告课程名称 C语言程序设计课题名称 学生信息管理系统专 业 机械班 级 02学 号 20姓 名 刘某某指导教师 肖伟平 何宏 郭芳2012年 12 月 19 日湖南工程学院课 程 设 计 任 务 书课程...
1053



被折叠的 条评论
为什么被折叠?



