版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目 录 1 需求分析需求分析.1 1.1 问题描述.1 1.2 输入数据要求 .1 1.3 输出数据要求 .1 1.4 开发环境和工具 .1 1.5 成员分工 .1 2 总体设计总体设计.2 2.1 总体设计思路.2 2.2 模块结构图.2 2.3 模块说明.3 3 详细设计详细设计.4 3.1 数据类型定义.5 3.2 打开模块实现.6 3.3 更新模块实现.6 3.4 统计模块实现.7 4 测试结果及分析测试结果及分析.12 5 总结总结.17 参考文献参考文献.18 附录附录.19 1 需求分析需求分析 1.1 问题描述问题描述 随着社会经济的发展,大学生已经成为这个社会上一个很重要的
2、团体,而他 们的消费情况也越来越多的被更多的人关注,大学生自己也应当管理好自己的消 费内容,让自己的消费更加合理化,提高自己生活的质量。在这种情况下,就需 要一个软消费表信息:编号,时间,类别,品名,单价,数量,金额 对学生每天的消费情况作一个较为详细的统计,该系统可以实现由计算机代 替人工执行一些复杂而且较为繁琐的操作,从而使大学生们能够更为便捷地管理 自己的消费,也为其他的一些调查研究提供了方便。 1.2 输入数据要求输入数据要求 可录入消费者当天的消费情况,消费表信息包括:编号,时间,类别,品名, 单价,数量,金额 消费信息存放在文件中,以编号的先后顺序存放 1.3 输出数据要求输出数据
3、要求 打开:显示文件中的所有消费记录,提供分页显示 保存:将消费表的更新结果存入文件 更新:可插入、删除、修改各消费记录 查找:按时间,类别、品名查找消费记录 排序:按时间,类别,金额 统计:求各类别消费品的总金额,求各月的消费总金额,求各年消费总金额 1.4 开发环境和工具开发环境和工具 开发环境:windows 2000 开发工具:visual c+ 6.0 1.5 成员分工成员分工 刘倩钰:主函数模块,保存模块,排序模块 刘冬梅:打开模块,更新模块,数据统计模块 2 总体设总体设计计 2.1 总体设计思路总体设计思路 1. 设计思路设计思路 个人消费系统管理包含的操作有:打开、保存、更新
4、、查找、排序和统计。在程序开始 运行的时候从文件加载已有数据,并输出可以进行的操作提供给用户, 1、打开:显示文件中的所有消费记录,通过取模运算提供分页显示功能 2、保存:以 wb 模式打开文件,将修改的内容写入文件 3、更新:可插入、删除、修改各消费记录 4、查找:按时间,类别、品名查找消费记录 5、排序:按时间,类别,金额 6、统计:分别按类别、月、年统计消费品的总金额 2. 数据存储数据存储 为了操作的方便,用 typedef 自定义了一些数据类型,其中包含一个长度为 max 的数组, 用来存放从文件中读取的数据。 2.2 模块结构图模块结构图 根据需求将系统划分为六个功能模块,函数之间
5、的调用关系如图 2.1 所示。 图 2.1 个人消费系统的模块结构图 main 主函数 showtotal 统计 calleditupdaterec 更新 sortrec 排序 findrec 查找 saverec 保存 showrec 打开 calledit:在主函数的控制下,调用各个模块 1)showrec: 输出已存在的记录。 2)saverec:保存更新的内容。 3)updaterec: 按一定的方式更新记录。 这个模块下包含三个子模块 插入:insert 删除: deletebynum 修改:modify 4)findrec: 按一定的方式查找记录。 这个模块下也包含三个子模块 按日
6、期查找:findbytime 按类型查找:findbytype 按名称查找: findbyname 5)sortrec: 按一定的方式查找记录。 这个模块下也包含三个子模块 按日期查找:sortbytime 按类型查找:sortbytype 按名称查找: sortbysum 6)showtotal: 显示各种统计的结果 2.3 模块说明模块说明 (以从上至下,从左至右的顺序说明) 2.3.1:打开模块:打开模块: 自定义函数:showrec( ) 函数功能:输出已存在的历史记录 无参函数:无参数 2.3.2:更新模块:更新模块: 自定义函数:updaterec( ) 函数功能: 可对输入数据实
7、现插入,删除,修改操作。 无参函数:void 类型,无返回值。调用 insert()函数,delete()函数和 modify() 插入模块:自定义函数:插入模块:自定义函数: insert()() 函数功能:实现插入新的信息并保存到记录中,其中插入的数据最后金额可以 自己运算出来,插入的记录保存在尾部。 无参函数:返回值为 int 类型 删除模块:自定义函数删除模块:自定义函数; removebynum(int num) 函数功能:对所选信息按编号删除,删除过后,后面记录到编号将全部减 1, 记录的编号即下标。 输入参数:int 类型,返回值是 int 类型。
8、num-int 类型,表示 define.h 文件中定 义的类型 rec_con 中数组 record的下标,删除过后,后面记录到编号将全部减 1,记录的编 号即下标。后面的记录全部向前移动一个距离。 修改模块:自定义修改函数:修改模块:自定义修改函数:modify() 函数功能:按名称修改记录,先判断要查找的名称所对应的记录是否存在,不 存在则直接返回。 无参函数:返回值为 int 型 2.3.3:统计模块:统计模块: 函数原型:函数原型:showtotal( ) 函数功能:显示统计结果 无参函数:void 类型,无返回值。 按类型统计:按类型统计:showt
9、ype( ) 函数功能:按类型显示统计结果 无参函数; void 类型,无返回值。 按月显示统计结果:按月显示统计结果: 函数原型函数原型:showmonth() 函数功能:忽略了年,按月显示统计结果 无参函数:void 类型,无返回值。 按年显示统计结果按年显示统计结果: 函数原型函数原型:showyear() 函数功能:按年显示统计结果 无参函数:void 类型,无返回值。 3 详细设计详细设计 3.1 数据类型定义数据类型定义 关键数据都定义在关键数据都定义在 define.h 里里 #define max 100 /人为定义的一个上限 typedef s
10、truct / 定义记录结构体,并重新命名类型名 int num; /编号 char times11; /时间 char types20; /类别 char name20; /品名 double price; /单价 int quantity; /数量 double sum; /金额 rec; typedef struct / 定义操作结构体,并重新命名类型名 rec recordmax+1; /定义结构体变量,可操作的记录总数,下标为 0 和 max 不存放记 录 int total_count; /整型变量,记录总数 rec_con,*prec_con; union /定义一个查找时使用的
11、共用体 char times11; /存放按时间查找时输入的时间 char types20; /存放按类型查找时输入的类型 char name20; /存放按名称查找时输入的名称 found; /下面三个变量都是全局变量 file *fp; /定义文件指针 rec_con rs; /用来定义变量,避免了动态分配中的安全问题 prec_con records= /定义操作指针变量 int type_count=0; /记录里相关的类型数目 int year_count=0; /记录里相关的年数目 char *ptypemax+1; /字符型变量,记录里相关的类型 char pyearmax+15
12、; /字符型变量,记录里相关的年 char tmp5; /字符型变量,取年份所用 char tmp015,tmp025; /存放 get4 的返回值,在比较时使用 char c; /字符型变量,临时使用变量,没有固定的限制 3.2 showrec 模块实现模块实现 1.算法思想算法思想:按编号, 时间,类别,品名,单价,数量,金额的顺序打开文件,并显示结果。 其中提供分页显示功能。 2.具体实现:具体实现: void openfile() /打开文件函数,以二进制append形式操作 if(fp=fopen(consum,ab+)=null) printf(file open fail!n);
13、 return ; void showi(int i) /根据i值输出记录 printf(记录:nn); printf(n编号 时间 类别 品名 单价 数量 金额 n); printf(%-5d% -10s%15s%15s %8.2f%5d%8.2fn,records- recordi.num,records-recordi.times,records-recordi.types,records- ,records-recordi.price,records-recordi.quantity,records- recordi.sum); int showrec() /显
14、示所有记录 int i; for(i=1;itotal_count;i+) printf(%-5d%-10s%15s%15s%8.2f%5d%8.2fn,records- recordi.num,records-recordi.times,records-recordi.types,records- ,records-recordi.price,records-recordi.quantity,records- recordi.sum); if(i%10)=0) /实现分页功能 printf(press any key show next pagen); getchar
15、(); /cls(); return 1; 3.3 更新模三个块:更新模三个块: 更新包括内容;插入,删除,查找 1.算法思想:算法思想:利用三个自定义函数:int insert() /插入函数,int deletebynum() /按编号删除,int modify() /按名称修改记录。插入过程用max控制插入信息的范围; 删除时按编号删除,删除过后,后面记录到编号将全部减1,记录的编号即下标。修改时 先利用int findbyname(char *name);按名称查找记录函数,找到相关信息,若无此信息 直接跳转,否则修改。 2.具体实现:具体实现: int insert() /插入函数
16、if(records-total_count=(max-1) printf(数据已达可控范围,不能再插入!n); return 0; int i=(+records-total_count); records-recordi.num=i; /编号是连续的, printf(n 时间 类别 品名 单价 数量 金额 n); scanf(%s%s%s%lf%d,records-recordi.times,records- recordi.types,, if(strlen(records-recordi.times)!=10|records-recordi.ti
17、mes4!=- |records-recordi.times7!=-) /简单的判断一下日期是否符合格式要求 printf(时间格式错误,请重试!n); records-total_count-; return 0; records-recordi.sum = records-recordi.price * records- recordi.quantity; /金额是计算所得 #ifdef debug showi(i); #endif return 1; int removebynum(int num) /删除过后,后面记录到编号将全部减1,记录的编号即 下标 int i; if(numre
18、cords-total_count) printf(位置错误!n); return 0; for(i=num;itotal_count;i+) /i后面的记录全部向前移动一个距 离 records-recordi.num=records-recordi+1.num-1; strcpy(records-recordi.times,records-recordi+1.times); strcpy(records-recordi.types,records-recordi+1.types); strcpy(,records-recordi+1.name); r
19、ecords-recordi.price=records-recordi+1.price; records-recordi.quantity=records-recordi+1.quantity; records-recordi.sum=records-recordi+1.sum; return 1; int deletebynum() /按编号删除 int num; printf(请输入要删除记录的编号:); scanf(%d, if(!(removebynum(num) printf(程序执行错误,删除失败!n); return 0; else return 1; int findbyna
20、me(char *name); /声明按名称查找记录函数,下面就要使用到 int modify() /按名称修改记录 int i; char names20; printf(请输入要修改的记录名称:); scanf(%s,names); i=findbyname(names); if(!i) /判断要查找的名称所对应的记录是否存在,不存在 则直接跳转 return 0; printf(请输入所需信息:n); printf(n 时间 类别 品名 单价 数量 金额 n); scanf(%s%s%s%lf%d,records-recordi.times,records- recordi.types,
21、, records-recordi.sum = records-recordi.price * records- recordi.quantity; return 1; 3.4 showtotal 模块实现模块实现 showtotal 包括三种方式:类型、月、年,以类型为例说明 1、算法思想、算法思想 为确保不会溢出,保存统计结果的 total 数组定义长度为 max,接下来对记录集进行遍 历,并与ptype数组中统计的类型进行比对,按照对应的下标将统计结果加到 total数组中,这样做便于 输出时一一对应。 (复杂算法用流程图辅助说明) 2、具体实现、
22、具体实现 (给出实现算法的关键代码) 按类型显示统计结果 void showtype() int i=1,j=0; double totalmax=0.0; /定义保存统计结果的数组 while(itotal_count i+; else j+; /输出统计结果 printf(按类型统计结果如下:n); for(i=0;itype_count;i+) printf(%s:t%8.2fn,ptypei,totali); printf(n); 4 测试结果及分析测试结果及分析 1.1. 打开程序,进入主界面打开程序,进入主界面 2.2. 输入输入“1”“1” ,打开历史消费记录:,打开历史消费记录
23、: 3.3. 输入输入“1”“1” ,测试更新模块:,测试更新模块: 4.输入输入“1” ,插入信息数据:,插入信息数据: 5.输入输入“2” ,按编号删除数据:,按编号删除数据: 6.输入输入“3” ,修改历史信息,修改历史信息; 7.输入输入“0” ,返回主菜单:,返回主菜单: 8.输入输入“6” ,测试统计结果;,测试统计结果; 9. 输入“1”,按类别统计结果: 10,输入“2”,按月显示统计结果: 10. 输入“3”,按年显示统计结果: 5.总结总结 为期四天的课程设计结束了,其中的酸甜苦辣恐怕只有经历过的人才会懂得。 其实课程设计的题目老师很早就发下来了,但由于自己时间观念不强,没
24、有提前 准备,所以搞得开始做的时候发现很多东西都不会,又临时学占用了很多时间。 下次一定要吸取教训,不能临时抱佛脚啊!此次课程设计虽然很难,但也让我学 到了很多东西。它让我学会的不仅仅是怎么去编一个大的程序,更让我学会了怎 样去开始做一件事,怎样规划自己的时间做好一件事。刚开始看到提示真的是一 片茫然,不知如何下手,然后经过自己上网查阅和看了一些课程设计的书之后渐 渐有了一点眉目。这些对我的自学能力锻炼很大。另外,在编程过程中也遇到了 很多很多的问题,比如统计模块的数组元素定义错误导致结果不能运行,等等、 、 、我知道自己在 c 这条路上还有很长的路要走,但这次得课程设计无疑给了我 更加坚定走
25、下去的信心,他让我体会了迷茫,烦躁,痛苦、 、 、但它也让我学会了 淡定,从容,坚持、 、 、它带给我四个晚上熬夜到两点半的记录,它也带给了我看 到程序运行出结果的喜悦、 、 、程序中的各种各样的错误曾经让我失望甚至绝望, 想放弃,但同组的我们相互鼓励视乎又看到了希望、 、 、在这次设计中还请教了几 个学计算机的高中同学,这让我学会了要善于向他人求助,同时好久没联系的同 学通过这次设计也加强了我们的联系。 我认为这次课程设计对我们的锻炼很大,它处在离考试只有三四天的时候, 这么紧迫的时刻有这么短的时间,这大大的锻炼了我们的时间安排能力和不急不 躁心态。另外程序中还有很多不完善的地方,希望以后加
26、强学习能够将其改正至 臻完善吧。非常感谢这次设计中给我们帮助的同学,学长和老师! 6.参考文献:参考文献: 参考文献: 1谭浩强等.c 语言程序设计教程.北京:高等教育出版社,1997. 2谭浩强.c 程序设计.第 2 版.北京:清华大学出版社,1999. 3徐士良.c 程序设计教程 附录附录 主函数源程序代码:主函数源程序代码: #include #include #include #include #includedefined.h #includearc.h int main(void) int chioce; /开始的时候使用 char 试了一下,有些功能不能实现 records-to
27、tal_count=0; #ifdef debug printf(jskdljf:%dn,records-total_count); #endif void calledit(int chioce); /声明中间过程函数 openfile(ab+); /打开文件并初始化数组,即加载数据 while(!feof(fp) fread( /record0 中并不存放记录数据,以后作为查找到前哨站 fclose(fp); #ifdef debug printf(jskdljf:%dn,records-total_count); showrec(); #endif while(1) /用一个死循环实现循
28、环操作,只有选择退出的时候才退出 system(cls); printf(-消费记录系统-n); printf(1-打开n); printf(2-保存n); printf(3-更新n); printf(4-查找n); printf(5-排序n); printf(6-统计n); printf(other-退出n); printf(请输入操作序号:); scanf(%d, system(cls); if(chioce6|chioce1) break; else calledit(chioce); /调用中间过程函数 return 0; void calledit(int chioce) void
29、updaterec(); void findrec(); void sortrec(); switch(chioce) case 1: showrec(); break; case 2: saverec(); break; case 3: updaterec(); break; case 4: findrec(); break; case 5: sortrec(); break; case 6: showtotal(); break; default: break; return ; void updaterec() int mc; while(1) printf(1-插入n); printf
30、(2-删除n); printf(3-修改n); printf(0-离开n); printf(请选择:); scanf(%d, if(mc=1) insert(); else if(mc=2) deletebynum(); else if(mc=3) modify(); else if(mc=0) break; else printf(输入有误,请重试!n); continue; scanf(%c, void findrec() int mc; int i; while(1) printf(1-按时间查找n); printf(2-按类型查找n); printf(3-按名称查找n); printf
31、(0-离开n); printf(请选择:); scanf(%d, if(mc=1) printf(请输入时间(format:2011-12-31):); scanf(%s,found.times); if(strlen(found.times)!=10|found.times4!=- |found.times7!=-) /简单的判断一下日期是否符合格式要求 printf(时间格式错误,请重试!n); continue; i=findbytime(found.times); if(i) showi(i); else if(mc=2) printf(请输入类型:); scanf(%s,found.
32、types); i=findbytype(found.types); if(i) showi(i); else if(mc=3) printf(请输入名称:); scanf(%s,); i=findbyname(); if(i) showi(i); else if(mc=0) break; else printf(输入有误,请重试!n); continue; scanf(%c, system(cls); void sortrec() int mc; while(1) printf(1-按时间排序n); printf(2-按类型排序n); printf(3
33、-按金额排序n); printf(0-离开n); printf(请选择:); scanf(%c, if(mc=1) sortbytime(); else if(mc=2) sortbytype(); else if(mc=3) sortbysum(); else if(mc=0) break; else printf(输入有误,请重试!n); continue; scanf(%c, system(cls); define.hdefine.h文件代码文件代码: #define max 100 /人为定义的一个上限 /#define debug /控制调试信息的输出 typedef struct
34、int num; /编号 char times11; /时间 char types20; /类别 char name20; /品名 double price; /单价 int quantity; /数量 double sum; /金额 rec; typedef struct rec recordmax+1; /可操作的记录总数 int total_count; /记录总数 rec_con,*prec_con; union char times11; char types20; char name20; found; /下面三个变量都是全局变量 file *fp; /定义文件指针 rec_con
35、 rs; prec_con records= /定义指针变量 int type_count=0; /记录里相关的类型数目 int year_count=0; /记录里相关的年数目 char *ptypemax+1; /记录里相关的类型 char pyearmax+15; /记录里相关的年 char tmp5; /取年份所用 char c; /使用频率很高的一个变量,后来好像又没声明用了,先放着吧 arc.h 文件代码文件代码: #include void openfile(char * mode) /打开文件函数,以二进制append形式操作 if(fp=fopen(consum,mode)=
36、null) printf(file open fail!n); return ; void showi(int i) /根据i值输出记录 printf(记录:%-5d%-10s%15s%15s%8.2f%5d%8.2fn,records-recordi. num,records-recordi.times,records-recordi.types,records- ,records-recordi.price,records-recordi.quantity,records- recordi.sum); int showrec() /显示所有记录 int i; pri
37、ntf(tt-打印记录-nn); printf(编号t 日期tt 类型t 名称t 单价 数量t 金额n); for(i=1;itotal_count;i+) printf(%-5d %-10s%15s%15s%8.2f%5d %8.2fn,records- recordi.num,records-recordi.times,records-recordi.types,records- ,records-recordi.price,records-recordi.quantity,records- recordi.sum); if(i%9)=0) /实现分页功能 prin
38、tf(press any key show next page); getchar();getchar(); /不明白这里为什么非要两次getchar()? system(cls); printf(tt-打印记录-nn); printf(编号t 日期tt 类型t 名称t 单价 数量t 金额 n); printf(press any key into main menu); return 1; int saverec() /保存更新 int i; openfile(wb); for(i=1;itotal_count;i+) fwrite( fclose(fp); return 1; int in
39、sert() /插入函数 if(records-total_count=(max-1) printf(数据已达可控范围,不能再插入!n); return 0; int i=(+records-total_count); records-recordi.num=i; /编号是连续的,1n printf(请输入所需信息(顺序为:时间,类别,品名,单价,数量):); scanf(%s%s%s%lf%d,records-recordi.times,records- recordi.types,, if(strlen(records-recordi.times)!
40、=10|records-recordi.times4!=- |records-recordi.times7!=-) /简单的判断一下日期是否符合格式要求 printf(时间格式错误,请重试!n); records-total_count-; return 0; records-recordi.sum = records-recordi.price * records- recordi.quantity; /金额是计算所得 #ifdef debug showi(i); #endif return 1; int removebynum(int num) /删除过后,后面记录到编号将全部减1,记录的
41、编号即 下标 int i=num; if(numrecords-total_count) printf(位置错误!n); return 0; #ifdef debug showi(i); #endif for(i=num;itotal_count;i+) /i后面的记录全部向前移动一个距 离 records-recordi.num=records-recordi+1.num-1; strcpy(records-recordi.times,records-recordi+1.times); strcpy(records-recordi.types,records-recordi+1.types)
42、; strcpy(,records-recordi+1.name); records-recordi.price=records-recordi+1.price; records-recordi.quantity=records-recordi+1.quantity; records-recordi.sum=records-recordi+1.sum; records-total_count-; return 1; int deletebynum() /按编号删除 int num; printf(请输入要删除记录的编号:); scanf(%d, if(!
43、(removebynum(num) printf(程序执行错误,删除失败!n); return 0; elsereturn 1; int findbyname(char *name); /声明按名称查找记录函数,下面就要使用到 int modify() /按名称修改记录 int i; char names20; printf(请输入要修改的记录名称:); scanf(%s,names); i=findbyname(names); if(!i) /判断要查找的名称所对应的记录是否存在,不存在 则直接跳转 return 0; printf(请输入所需信息(顺序为:时间,类别,品名,单价,数量):)
44、; scanf(%s%s%s%lf%d,records-recordi.times,records- recordi.types,, records-recordi.sum = records-recordi.price * records- recordi.quantity; #ifdef debug showi(i); #endif return 1; int findbytime(char *times) /按时间查找记录 int i=1; strcpy(records-recordrecords-total_count+1.times,times
45、); while(strcmp(records-recordi.times,times)!=0) i+; if(i=records-total_count+1) printf(记录不存在!n); return 0; else return i; int findbytype(char *types) /按类型查找记录 int i=1; strcpy(records-recordrecords-total_count+1.types,types); while(strcmp(records-recordi.types,types)!=0) i+; if(i=records-total_count
46、+1) printf(记录不存在!n); return 0; else return i; int findbyname(char *name) /按名称查找记录 int i=1; strcpy(records-recordrecords-total_count+1.name,name); while(strcmp(,name)!=0) i+; if(i=records-total_count+1) printf(记录不存在!n); return 0; else return i; char * get4(char times) /获取时间字段的前四位,
47、即年份 tmp0=times0; tmp1=times1; tmp2=times2; tmp3=times3; tmp4=0; return tmp; int sortbytime() /按时间排序 rec rectmp; int i,j,t; for(i=1;itotal_count;i+) for(j=i+1,t=i;jtotal_count;j+) if(strcmp(records-recordt.times,records-recordj.times)0) t=j; rectmp=records-recordt; records-recordt=records-recordi; re
48、cords-recordi=rectmp; #ifdef debug showrec(); #endif year_count=1; strcpy(pyear0,get4(records-record1.times); for(i=1;itotal_count;i+) if(strcmp(get4(records-recordi.times),get4(records- recordi+1.times)=0) /there is something wrong,还有最后一个bug,就在这 里 continue; else strcpy(pyearyear_count+,get4(records
49、- recordi+1.times); /遇到不同的年份,把最新的存储进来 #ifdef debug printf(nfrom sortbytimen); for(i=0;iyear_count;i+) printf(%st,pyeari); printf(n); #endif return 1; int sortbytype() /按类型排序 rec rectmp; int i,j,t; for(i=1;itotal_count;i+) for(j=i+1,t=i;jtotal_count;j+) if(strcmp(records-recordt.types,records-recordj.types)0) t=j; rectmp=records-recordt; records-recordt=records-recordi; records-recordi=rectmp; #ifdef debug showrec(); #endif type_count=1; ptype0=records-record1.types; fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度电商渠道加盟协议书3篇
- 二零二四年度商业租赁合同的标的与属性分析
- 二零二四年度办公室地板采购合同
- 二零二四年度版权许可使用合同(音乐作品)
- 二零二四年度涉外税收优惠政策合同
- 二零二四年度铝合金模板企业员工培训合同
- 二零二四年度影视制作合同的服务条款
- 滨涯幼儿园2024年度学生健康体检合同
- 二零二四年度技术开发合同之技术成果共享与保密
- 二零二四年度煤矿通风系统改善工程承包合同
- 自动化生产线的安全系数优化研究
- 11D703-2 液位测量装置安装
- 运动训练学-运动训练方法与手段
- ESD静电防护检测及管控标准
- 国家开放大学财务报表分析形成性考核
- 工程施工现场应急方案
- 【大数据时代个人隐私保护的法律对策6200字(论文)】
- 宁夏回族自治区地图矢量动态PPT模板(图文)
- 监理日常安全巡视要点监理日常安全巡视要点
- 法律顾问服务职业发展研究报告
- 2023年辽宁省新高考历史试卷(含解析)
评论
0/150
提交评论