×

电脑报价系统c语言课程设计,C语言课程设计报告要求

admin admin 发表于2024-03-09 06:36:34 浏览10 评论0

抢沙发发表评论

本文目录一览:

C语言实现商品价格查询系统?

#include
#include
#define N 20
struct shop{
char name[10];
float pri;
}a[N];
void inputa(int n,int n0){
for(int i=n-n0;i printf("请输入品名 价格\n") ;
scanf("%s%f",&a[i].name,&a[i].pri);
}
}
void change(char s[],int n){
for(int i=0;i if(!strcmp(s,a[i].name)){
printf("改价格:");
scanf("%f",&a[i].pri);
break;
}
else printf("未找到!");
}
}
void find(char s[],int n){
for(int i=0;i if(!strcmp(s,a[i].name)){
printf("%d\t%s\t%.2f\n",i+1,a[i].name,a[i].pri);
break;
}
else printf("未找到!");
}
}
void outa(int n){
for(int i=0;i printf("%d\t%s\t%.2f\n",i+1,a[i].name,a[i].pri);
}
}
void del(char s[],int n){
for(int i=0;i if(!strcmp(s,a[i].name))
while(i a[i]=a[i+1];++i;
}
else printf("未找到!");
}
}
int main(){
int t=1,n=0,n0=0;
char s[10];
while(t){
printf("1 增加记录\n2 修改价格\n3 删除记录\n4 查询商品\n5 查看全部\n0 退出系统\n");
scanf("%d",&t);
if(t<1)break;
switch(t){
case 1:
printf("增加记录条数?");
scanf("%d",&n0);
n+=n0;
inputa(n,n0);
break;
if(n<1) break;
case 2: printf("输入品名:");
scanf("%s",s);
change(s,n);
break;
case 3: printf("输入品名:");
scanf("%s",s);
del(s,n);
n--;
break;
case 4:
printf("输入品名:");
scanf("%s",s);
find(s,n);
break;
case 5:
outa(n);
break;
}
}
return 0;
}

C语言课程设计

#include
#include
#include
#include
#include
typedef struct linknode
{
long number; /* 编号 */
char name[51]; /* 名称 */
double price; /* 价格 */
long amount; /* 数量 */
double money; /* 总价 */
char producer[21]; /* 生产商 */
struct linknode *next;
} linknode;
linknode *head, *tail;
int NODSIZE;
void error(const char *errmsg);
void init();
void eatenter();
void input(linknode *node);
void insert();
void locate(linknode **pprev, linknode **pnext);
void remove();
void modify();
void output(linknode *node);
void search();
void cleanup();
void display();
void error(const char *errmsg)
{
puts(errmsg);
cleanup();
exit(1);
}
void init()
{
NODSIZE = sizeof(linknode);
head = tail = (linknode *)malloc(NODSIZE);
if (head == NULL)
error("无法分配内存!");
memset(head, 0, sizeof(linknode));
printf("欢迎使用简单货物信息管理系统\n");
}
void eatenter()
{
while (getchar() != '\n');
}
void input(linknode *node)
{
printf("商品名称: ");
scanf("%50[^\n]", node->name);
eatenter();
printf("商品价格: ");
scanf("%lf", &node->price);
eatenter();
printf("商品数量: ");
scanf("%ld", &node->amount);
eatenter();
printf("商品生产商: ");
scanf("%20[^\n]", node->producer);
eatenter();
node->money = node->price * node->amount;
}
/* 添加信息 */
void insert()
{
linknode *node;
long num;
printf("\n请根据提示输入商品信息(编号0结束)\n");
while (1)
{
printf("商品编号: ");
scanf("%ld", &num);
eatenter();
if (num == 0)
break;
node = (linknode *)malloc(NODSIZE);
if (node == NULL)
error("无法分配内存!");
node->number = num;
input(node);
tail->next = node;
tail = node;
tail->next = NULL;
}
}
void locate(linknode **pprev, linknode **pnext)
{
char choice, nm[51];
long num;
int invalid;
printf("请选择查找方式:\n");
printf("1: 名称 2: 编号\n");
do
{
invalid = 0;
choice = getchar();
eatenter();

if (choice != '1' && choice != '2')
{
printf("无效选项!请重新输入。\n");
invalid = 1;
}
}
while (invalid);
if (choice == '1')
{
printf("货物名称: ");
scanf("%50[^\n]", nm);
}
else
{
printf("货物编号: ");
scanf("%ld", &num);

}
eatenter();
printf("\n");
*pprev = head, *pnext = head->next;
invalid = 0;
while (*pnext)
{
if (choice == '1' && !strcmp((*pnext)->name, nm))
{
invalid = 1;
}
else if ((*pnext)->number == num)
{
invalid = 1;
}

if (invalid)
break;

(*pprev) = (*pnext);
(*pnext) = (*pnext)->next;
}
}
/* 删除信息 */
void remove()
{
linknode *prev, *cursor;
locate(&prev, &cursor);
if (cursor)
{
printf("成功删除记录\n");
prev->next = cursor->next;
if (cursor == tail)
tail = prev;

free(cursor);
}
else
{
printf("无法找到记录\n");
}
printf("按任何键返回上层菜单...\n");
getch();
}
/* 修改信息 */
void modify()
{
linknode *prev, *cursor;
locate(&prev, &cursor);
if (cursor)
{
printf("货物编号: ");
scanf("%ld", &cursor->number);
eatenter();
input(cursor);
printf("成功更新记录\n");
}
else
{
printf("无法找到记录\n");
}
printf("按任何键返回上层菜单...\n");
getch();
}
void output(linknode *node)
{
printf("商品编号: %ld\n", node->number);
printf("商品名称: %s\n", node->name);
printf("商品价格: %.2f\n", node->price);
printf("商品数量: %ld\n", node->amount);
printf("商品生产商: %s\n", node->producer);
printf("商品总价: %.2f\n\n", node->money);
}
void search()
{
linknode *prev, *cursor;
locate(&prev, &cursor);
if (cursor)
{
output(cursor);
}
else
{
printf("无法找到记录\n");
}
printf("按任何键返回上层菜单...\n");
getch();
}
void cleanup()
{
linknode *cursor = head;
while (cursor)
{
head = head->next;
free(cursor);
cursor = head;
}
}
void display()
{
linknode *cursor = head->next;
while (cursor)
{
output(cursor);
cursor = cursor->next;
}
printf("按任何键返回上层菜单...\n");
getch();
}
void main()
{
char choice;
printf("欢迎使用简单商品管理系统\n");
init();
while (1)
{
printf("请选择相关操作:\n");
printf("1: 添加记录\t2: 删除记录\t");
printf("3: 查询记录\n4: 修改记录\t");
printf("5: 显示记录\t6: 退出程序\n");
choice = getchar();
eatenter();
switch ( choice )
{
case '1':
insert();
break;
case '2':
remove();
break;
case '3':
search();
break;
case '4':
modify();
break;
case '5':
display();
break;
case '6':
cleanup();
exit(0);
}
system("cls");
}
}
靠,邮箱都不留怎么给
http://dl2.csdn.net/fd.php?i=66692153085104&s=70e20097d3f4106c6160e2123b9b4545
这是csdn上的一个下载地址,要是不能用我就传给你
发给你了
要许多时间来编啊
/*计算上个月每个人每种产品的销售额。
1)按销售额对销售员进行排序,输出排序结果(销售员代号)
2)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
3)输出统计报表如下:*/
#include
#include
#include
#include
#define Z 5
#define R 4 /*定义宏常量便于程序的一般化*/ /*R表示销售员个数*/
typedef struct /*缩短结构体变量名*/
{
int shangpin[Z]; /*定义结构体便于信息的存储和读写,辨别*/ /*R是表示商品的种类,最后一个为该销售员商品总和*/
}data;
void menu()
{ printf(" *******************************************************\n");
printf(" 0.结束操作\n");
printf(" 1.计算上个月每个人每种产品的销售额\n");
printf(" 2.按销售额对销售员进行排序,输出排序结果\n");
printf(" 3.统计每种产品的总销售额,输出排序结果\n");
printf(" 4.输出统计报表\n");
printf(" ******************************************************\n");
}
void data_read(data *x) /*读入函数使程序简洁*/
{
FILE *fp;
char fname[10];
int i;
printf("您想查询哪个月?\n");
printf("请输入月份:"); /*输入文件名,这样可以进行各个月份信息读入*/
scanf("%s",fname);
strcat(fname,".txt");/*连接文件属性*/
if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i if(fread(x+i,sizeof(data),1,fp)!=1)
printf("读入信息出错!\n");
}
void data_count(data *x) /*计算上个月每个人每种产品的销售额*/
{
FILE *fp;
char fname[10];
int j,t; /*用于控制循环*/
int i,k,s; /*用于定义职工序号,产品序号,产品数量*/
system("cls");
printf("您想计算哪个月?\n");
printf("请输入月份:"); /*输入文件名,这样可以进行各个月份信息写入*/
scanf("%s",fname);
strcat(fname,".txt");
if((fp=fopen(fname,"wb"))==NULL) /*打开文件*/
{
printf("can not open the file\n");
exit(0);
}
for(j=0;j for(t=0;t (x+j)->shangpin[t]=0;
printf("please put the information about the 职工编号,产品编号,销售数量\n"); /*写入信息*/
for(j=0;;j++)
{
scanf("%d%d%d",&i,&k,&s);
if(i==0) /*输入职工为0时结束信息输入*/
break;
if(i>R||i<0||k>Z||k<0)
{
printf("the information error!\n"); /*避免输入信息出错*/
continue;
}
else
(x+i-1)->shangpin[k-1]=(x+i-1)->shangpin[k-1]+s;/*统计各个人的各种产品的数量,-1为了和数组中的序号相匹配*/
}
for(j=0;j if(fwrite((x+j),sizeof(data),1,fp)!=1) /*把信息写入文件中便有以后调用*/
printf("write error!\n");
fclose(fp); /*关闭文件避免信息遗漏*/
}
void range_sxy(data *x) /*按销售额对销售员进行排序,输出排序结果*/
{
FILE *fp;
char fname[10];
int i,k,j,t,bianhao[R]={0},z;
system("cls");
printf("你要哪个月的?\n");
printf("请输入月份:"); /*输入文件名,这样可以进行各个月份信息读入*/
scanf("%s",fname);
strcat(fname,".txt");
if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i if(fread(x+i,sizeof(data),1,fp)!=1)
printf("读入信息出错!"); /*读入信息提示*/
for(i=0;i bianhao[i]=i++;
printf("请输入按何种产品排序\n");
scanf("%d",&k);
k=k-1; /*便于与结构体中的数组值对应*/
for(i=0;i {
t=i;
for(j=i+1;j if((x+bianhao[t])->shangpin[k]<(x+bianhao[j])->shangpin[k])/*调用职工各自对应的结构体内的产品数量*/
t=j;
if(t!=i)
{
z=bianhao[i];
bianhao[i]=bianhao[t];
bianhao[t]=z;
}
}
printf("按%d产品对销售员排序为:\n",k+1);
for(i=0;i printf("%5d",bianhao[i]+1);
getch();
fclose(fp);
}
void range_shangpin(data *x) /*统计每种产品的总销售额,输出排序结果*/
{
FILE *fp;
char fname[10];
int i,j,sum[Z]={0},bianhao[Z]={0},z,t,k;
system("cls");
printf("您想计算哪个月的?\n");
printf("请输入月份:"); /*输入文件名,这样可以进行各个月份信息读入*/
scanf("%s",fname);
strcat(fname,".txt");
if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i if(fread(x+i,sizeof(data),1,fp)!=1)
printf("读入信息出错!");
for(i=0;i for(j=0;j sum[i]=sum[i]+(x+j)->shangpin[i];
for(i=0;i bianhao[i]=i++;
for(i=0;i printf("%3d",bianhao[i]);
for(i=0;i {
t=i;
for(j=i+1;j if(sum[t] t=j;
if(t!=i)
{
k=sum[i];
sum[i]=sum[t];
sum[t]=k;
z=bianhao[i];
bianhao[i]=bianhao[t];
bianhao[t]=z;
}
}
printf("输出产品排序\n");
printf("产品编号 数量\n");
for(i=0;i printf("%-10d%-10d\n",bianhao[i]+1,sum[i]);
getch();
fclose(fp);
}
void data_out(data *x) /*输出统计报表*/
{
FILE *fp;
char fname[10];
int i,j,sum[Z+1]={0};
system("cls");
printf("您想计算哪个月?\n");
printf("请输入月份:"); /*输入文件名,这样可以进行各个月份信息读入*/
scanf("%s",fname);
strcat(fname,".txt");
if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i if(fread(x+i,sizeof(data),1,fp)!=1)
printf("读入信息出错!");
for(i=0;i for(j=0;j sum[i]=sum[i]+(x+j)->shangpin[i];
for(i=0;i sum[Z]=sum[Z]+sum[i];
printf("输出统计报表如下:\n"); /*按要求输出统计表*/
printf("产品代号 销售之和 销售员代号\n");
for(i=0;i for(j=0;j printf("%-10d%-10d%-10d\n",j+1,(x+i)->shangpin[j],i+1);
printf("***********************************\n");
for(i=0;i {
if(i==0)
printf("%d产品之和 %-10d 总和 %-10d\n",i+1,sum[i],sum[Z]);
else
printf("%d产品之和 %-10d\n",i+1,sum[i]);
}
getch();
}
void main()
{
int i,choice;
data sxy[R]; /*R表示职工的个数,前面的宏常量*/
for(i=0;;i++)
{
system("cls"); /*清频命令*/
menu(); /*菜单函数提示用户怎样选择*/
printf("你想做什么?\n");
printf("请选择:"); /*输入要进行的操作*/
scanf("%d",&choice);
if(choice==0) /*退出程序*/
break;
else
switch(choice)
{
case 1 : data_count(sxy);break; /*计算上个月每个人每种产品的销售额*/
case 2 : range_sxy(sxy);break; /*按销售额对销售员进行排序,输出排序结果*/
case 3 : range_shangpin(sxy);break; /*统计每种产品的总销售额,输出排序结果*/
case 4 : data_out(sxy);break; /*输出统计报表*/
}
}
}

2021笔记本选购指南 完整版推荐快来看看你适合哪款

掌握一些基础的笔记本电脑知识,无论是自己购买,还是给亲戚朋友,或者上大学的亲戚进行推荐(有部分专业对于笔记本电脑要求很高),都可以做到有的放矢,也不用到处去搜索 笔记本电脑选购攻略 ,毕竟大概半年一次小换代更新,你搜索到的攻略很可能是过期的。
笔记本电脑选购不是什么难题,如果你希望直接获得笔记本电脑的型号推荐,可以直接在评论区留言详细的电脑使用需求,一有时间都会回复。本篇文章较长,长期保持更新,欢迎点赞收藏。底部有关于 游戏 和大学专业笔记本建议专篇。
笔记本电脑推荐2021( 游戏 本)
在数字货币矿潮下,台式机显卡被消灭殆尽,这反而让 游戏 笔记本电脑的销量迎来了几次小爆发, 游戏 本和轻薄笔记本电脑的发展侧重点不同,基本上 游戏 本的设计目标都是为 游戏 服务,而不太在意重量,充电等设计,轻薄笔记本的小体积反而会成为 游戏 本性能发挥的障碍。
即便同样的CPU+显卡两大核心配件,在不同厂家设计出来之后的性能都会有较大的差距,所以买 游戏 本单单看硬件参数还不够, 游戏 本在极端负载情况下的运行能力才是最终性能的关键。这跟厂家的供电功耗调校,散热设计有很大的关系。
不过有些事情,电脑销售商大概率不会告诉你:
目前很多2021年的新款CPU型号基本还没有跑分更新。
游戏 显卡对于大型3D 游戏 ,特别是大型单机 游戏 的性能影响较大,目前笔记本电脑的显卡性能相对比较混乱,比如115W的3060显卡性能基本可以和80W的3080显卡平起平坐,而140W的3070显卡性能超过80W和100W的3080显卡,所以不是显卡的型号越高性能越强,还要看具体的功耗表现,关于该显卡的详细数据可以参考知友金猪升级包的测试结果
3050相比于1650提升不少,但是3050Ti相比于3050提升却不多。
笔记本电脑市场目前主要有3大类划分:
2021轻薄笔记本电脑推荐前十名排行榜
2021 游戏 本推荐(高性价比 游戏 笔记本电脑)
笔记本电脑推荐(设计篇:建筑、室内设计用途:CAD、MATLAB、C4D、Lumion,广联达等)
比较前排的 笔记本电脑品牌商,苹果,联想,惠普,戴尔,其中还有台湾的华硕,微星,宏碁,韩国的三星,LG,以及后期崛起的像小米,华为也不错 , 国内的还有机械师等等。 这些在后面的第四部分会有详细解说,根据操作系统,又分为苹果和微软操作系统,苹果系统的环境非常适合音乐、影视以及程序员工作,轻度办公和影视也可以,而微软系统有超多的软件和 游戏 ,比较适合 游戏 用户,比较通用,这些我们在不同产品文章里会全面更新。笔记本电脑大概每半年,销量排行榜都会迎来一次大的变化,各个厂家的产品竞争力也在升级过程中产生巨大变化。
修改中
在2011年英特尔启动了超轻薄笔记本市场,当时建立了一个3亿美元的市场基金,以促进轻薄成为现代笔记本电脑设计的新标准。目标是实现一个极其轻薄的设计理念,标准如下:
每一样需求的产生都会影响整个笔记本设计的趋势。 轻薄本的主要客户群体是几乎不怎么 游戏 ,有着大量学习、工作需求的用户(平板电脑生产力比较匮乏,属于 娱乐 品)。 就今天的轻薄本而言,无一例外都达到以上要求,于是在上面这些标准基础上,产生出了一些与生产力更加贴合的需求:
但是轻薄本的缺陷也很明显:

全能本外观,重量基本和轻薄本没有太多差距,但是配置了MX系列显卡,可以提供更强的3D性能,但是还不如 游戏 本的专用显卡。几乎轻薄本优缺点,全能本都有。价格相对较高。
游戏 本完全不同于轻薄本的设计,各种硬件配置规格都很高,比如CPU,显卡,以及供电系统都更加庞大,这也产生了很多缺陷。
相比于轻薄本,有以下缺点:
2020年底,INTEL重新推出了EVO认证的轻薄本,EVO认证的几个核心要求:
不同类型的笔记本电脑针对的用户群体:
一、轻薄笔记本电脑: 主要以核显笔记本为主,适用于大部分用户,比如看电影,办公,演示出差,方便查阅资料,并续航时间长,重量轻巧方便携带,方便出差通勤。这部分笔记本的价位大部分集中4000-6000元,中位数5000元,3000-4000也有不错的本子。
二、全能笔记本电脑: 适合对于轻薄有要求,但是需要在3D方面有部分提高,可以胜任一些3D的学习环境要求,也可以满足较多的 游戏 需求(非极限),比如LOL这类没有特别要求显卡性能的 游戏 都可以。这类笔记本一般提高显卡,价格在4500-7500区间,中位数5500。
三、 游戏 笔记本电脑: 除了大部分 游戏 需求,也适合3D方面要求较高的专业,以及对于 游戏 需求(比如3A级 游戏 大作),产品的价格一般较高。入门 游戏 本,采用1650ti显卡,基本5000-6500元区间,2060显卡中端 游戏 本基本7000-9000,而2070以上显卡的笔记本基本过万,2021年的3000系列显卡笔记本电脑基本会在8000起步。
四、EVO商务笔记本、苹果笔记本电脑: 适合高端商务用户,主流用户群体(音乐、视频、编程),部分对于轻薄要求高,或者对苹果品牌比较喜欢的文科类用户。整体对于 游戏 并不友好。这部分产品定价比较迷,像EVO认证的高端笔记本从6000-20000都有。
到底要选轻薄笔记本还是 游戏 本?
轻薄本和 游戏 本最大的差别是体积厚度重量, 游戏 本因为散热的需要,笔记本一般都比较厚,太轻薄的笔记本通常风扇和散热片都很难设计得好。另外一点是 游戏 本因为耗电厉害,通常情况下,续航也不如轻薄本。而且整体比较重——包括充电头。所以两者之间的平衡要看用户的具体使用场景和使用者的体力决定。
对于用户来说,如果只是办公看电影之类的,对续航有要求的一般比较建议轻薄本。对于性能有要求的,比较建议 游戏 本和台式机。但是要特别说明的是,参数看起来和台式机一样的 游戏 本,性能要低不少,不能光看配置,直接对比,而且同样配置的 游戏 本,在不同的散热和供电下,性能也会差距很大。女生通常比较建议轻薄笔记本,男生 游戏 多,建议 游戏 本多。
即便是性能非常接近的两台笔记本,价格也会有很大的区别,这个跟 汽车 一样,因为集成度较高,每家公司都有自己的私货设计理念。比如早些年IBM笔记本的质量确实过硬,无论是散热,系统硬盘保护或者笔记本键盘的设计,都不是一般的小公司都比的,而一些杂牌笔记本因为配置的主板、内存、显卡质量较低比较容易出现蓝屏故障,也有散热不佳导致的笔记本卡死,更厉害的是垃圾电池,有出现燃烧。不过现在技术比较成熟了,对于较大的品牌而言,差别一般不大了。
笔记本电脑选购过程中,以下三个配件会较大影响笔记本性能:
次要影响的配件和因素:
一般来说,大多数笔记本内存和硬盘都可以更换,只有少数品牌做得比较极端(更多是考虑机身厚度),比如华为和苹果,内存直很难更换,特别是华为有几个型号笔记本内存直接板载(焊死),要知道内存及硬盘是大部分笔记本少数在后期可以更换的配件,同时也影响着笔记本的服役周期,不过对于多数人更换不多,前期选择主流配置一般没有问题。
通常性价比是指下面两种情况:
以上这些都有时间限制,没有产品能够无比性价比 长期存在 ,随着时间的推移,产品也会很快更新换代,有些短期内没有竞争者的产品,即便价格较高,但是符合用户需求,也可以算作性价比产品,尤其在电子电器类的, 所以这个名单几乎每年都会更换,也是厂家竞争最有意思的地方。笔记本电脑差不多半年更新一次。
一般性价比比较高的笔记本电脑,主要具备以下特点:
一、同等级 笔记本电脑配置 最佳:CPU/显卡等内部配置同价位较高,屏幕等硬参数都达到同级别优秀,作为性价比的门槛之一,虽然有很多笔记本电脑达到这个基本门槛,但是后续的不足。电脑硬件配置可以查看笔记本的CPU和显卡天梯图。
二、较好的做工,品控,笔记本的整体品质上的去。许多优秀的笔记本产品还有一些额外的颜值加成,这可以满足一部分用户的特殊需求,比如RGB、人脸识别等,同价位的笔记本电脑独有,也可以算作性价比之一,即便是同品牌旗下,相同价位,不同型号也有很大的差距,这些看不到的部分,其实都间接提高了品牌的成本,也带来了更好的体验。
三、品牌和售后,一般头部笔记本电脑品牌都会做得比较好,通常产品线生命周期较长,有足够的配件更替,特别像笔记本主板这种大硬件都是厂家独有,而很多小品牌这方面会比较差一些,但不是大厂的都行,大厂一些销量小的型号一样有这个问题。
一般把握好上面三点,基本可以买到市面上比较优秀的笔记本电脑。
另外还有一个非常特殊的情况,比如苹果笔记本因为没有直接竞品,而特殊的操作系统和特殊的专用软件(音乐、视频编辑),包括2020最新推出的采用M1芯片的笔记本,都有独特的竞争力,这些加上苹果品牌加持,笔记本的保值率非常高,性价比一样存在。
笔记本的CPU和台式机有些不同,在这个领域,Intel依旧是市场最高占有率的。
在移动电脑方面,这几年intel高节能产品,几乎承包了整个笔记本市场。不过在2017年AMD 12纳米工艺起来,也有几款很不错的CPU,比如 R5 3500U都是目前的超级性能CPU跟I7标压有一战。但是从市场看,还是intel较多,因为笔记本属于高集成产品,大家都爱做利润高的产品。在较低价位最常见的Intel i5 8265U,往上升级i7.
到了2020上半年,Intel的处理出到10代,AMD出到4000系列。而到了2020年底,英特尔酷睿11代也出来了,不过目前11代的机型还比较贵,产品里面主要提高了核显,2021年应该会大规模普及。
intel至今一直是笔记本的老大,一个是因为其一手推动了轻薄本的潮流,另外因为intel的模块化生态非常成熟,无论是板载CPU还是显卡,在功耗和发热方面都普遍低于AMD,不过AMD最新的锐龙系列笔记本也得到了优化。Intel对于做编程项目,特别是比较底层的C语言来说执行效率更高,但是者科学运算语言没有太多影响,AMD过去在一些数据库软件会有一些未知的错误,省事intel,省钱AMD。
一般来说为了减少重量,压缩体积,轻薄笔记本的性能都不会太强,而且多数为英特尔集成显卡(也经常叫核显)为主(更多的可以参考:笔记本集显 游戏 表现大PK):
INTEL笔记本CPU编号规则:

目前最常见的笔记本CPU如下:
#Intel平台2020年CPU
#AMD平台2020年CPU
2020年英特尔更新到11代酷睿,AMD全部进入4000系列,最为标配的CPU分别是i5-1135G7/4600U,新一代的intel酷睿核显也提高非常多,性能直接翻倍,而AMD核显跑分更高,玩LOL这些4600U的核显是完全足够的(1080P),如果是轻薄本一般建议4600U,最新一代的锐龙5000系列,目前只宏碁Aspire 5 A515发布。AMD一般低端核显笔记本较多,但是从使用上看,Intel笔记本的续航通常更长更稳定。
对于经常编程的用户来说,建议inte的轻薄本(配置MX350)。
为什么很多人推荐中央处理器买英特尔不买超威半导体(AMD)?
笔记本的CPU性能天梯图:2020笔记本CPU天梯图
MaxSam:笔记本CPU天梯图2020
对于笔记本而言,只要区分三种显卡就行:集显、 游戏 显卡、专业显卡。
轻薄本常见显卡:
集显来说,主要INTEL/AMD平台的,R5 4600U和R7 4800H内置了不错的VG10核心显卡都能流畅玩LOL一些 游戏 ,性能比intel大部分集显都要强,性能跟MX150差不多。11代的英特尔酷睿核显xe系列则直接提高了一倍性能,两者差价大幅度缩小。
全能本常见显卡:
全能本独立显卡目前常见的GeForce MX350(43271分)、 GeForce MX450 (最新)
游戏 本常见显卡:
笔记本显卡最为推荐的1650/1660ti/2060三种,由于移动端的设计2060的TDP被压制在80-90w,所以很多时候表现的性能表现和1660ti差不多,这也是为什么大部分笔记本都配这个显卡的原因。如果吃鸡,1660ti是基本要求。
2021年下一代笔记本独立显卡:
以及相对应显卡的笔记本报价:
在专业显卡显卡领域,之前还是 NVIDIA Quadro P5200 ,目前已经到 Quadro RTX 5000,专业显卡和 游戏 显卡最大的不同是支持一些专业软件,一般的有限在开一些专业软件的时候某些功能会被锁死,特别在一些工业设计领域。这类显卡不但核心多得吓人,显存也巨大,价格也惊人。目前只有一些高端移动工作站才会配,采购领域很多是工业公司,影视工作室等,不差钱土豪公司常用。
2021 游戏 笔记本电脑推荐(30系显卡笔记本电脑及价格整理)笔记本CPU天梯图:
目前很多2021年的新款CPU型号基本还没有跑分更新。
游戏 显卡对于大型3D 游戏 ,特别是大型单机 游戏 的性能影响较大,目前笔记本电脑的显卡性能相对比较混乱,比如115W的3060显卡性能基本可以和80W的3080显卡平起平坐,而140W的3070显卡性能超过80W和100W的3080显卡,所以不是显卡的型号越高性能越强,还要看具体的功耗表现,关于该显卡的详细数据可以参考知友金猪升级包的测试结果 [1] .
3050相比于1650提升不少,但是3050Ti相比于3050提升却不多。
绝大的多数的笔记本有集显(核显),1080P下运行LOL这类 游戏 基本都没有太多压力的,3500U/3700U都没有什么问题。
来自专门网:http://www.sohu.com/a/331276013_120156943
游戏 本的显卡建议:
工作用的:

笔记本和台式机的内存相比更短,但更宽一些。2019年已是第四代DDR4 2666mhz,而上一代的DDR3是1600mhz,笔记本的内存到了2020年,已经发展到DDR4 2933/3200(11代酷睿已经到4266mhz),由于系统占用,建议大家购买笔记本的时候, 8G内存起步,推荐16G!!!
简单的说,假设是4G,win10启动运作,有时候要占到2.8G内存,而开个LOL加载,会导致严重的卡顿。 游戏 在加载的时候也会出现这种情况。 另外,由于轻薄本很多是一体化设计,后期不好拆卸!基本无法换内存,建议一步到位。
(图1为台式机硬盘,中间为笔记本机械硬盘,最后为固态SATA3)
过去笔记本都是上面的后2种,IBM还为此设计过跌落保护专利,不过现在新兴的技术M.2固态已经基本抛弃上面这三种硬盘,使用和台式机使用同样的M.2,因为拆卸不变,所以大部分情况下,建议256/512起步,资料多的可以多配大一点,也可以另外加个移动硬盘。
M.2 NVME协议接口的硬盘读取是最快的,笔记本机械硬盘读取速度:
机械(5400-90M/S)

C语言程序设计报告(商品订购系统)

题目:商品订购系统设计。
功能:屏幕上出现一个界面,让顾客或输入商品名称,或商品型号,或选择列表进而输入商品编号都可以,如查到所选商品,则列出商品编号、商品名称、商品型号、商品价格、商品产地、库存数量和已订购数量;然后给出选购流程:所选商品编号—列出对应商品的信息—要求顾客输入邮寄地址信息—确认订购,是否继续选购其它商品,列出所有选订商品,再次确认订购。建立两个文件,分别存放商品信息与订购信息。
分步实施:
1、 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、完成最低要求:建立一个小系统,包括10种产品能供顾客选择。
3、进一步要求:完成全部功能的系统。
要求:1、用C语言实现程序设计;
2、利用结构体数组实现信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:
1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、
小结等。
高手请帮帮我好吗?谢谢~

编程(C语言)题,查询价格的程序,说查询满五次自动结束,输出Thank you,输入0,自动结束,输出Thank you.

如果是acm 的题的话, 可能这个数据会很大
主要说一下算法, 自己写代码:
两个数可以在一次输入中获取, 分别存于char *strNum1, char *strNum2中,
1, 首先判断符号位, 如果没有符号(直接是数字)或者有+表示为正数, 如果是-则为负数.
2, 两个数字去头零(小数点的前零), 可以通过增加下标或者设置临时指针, 用一个while语句就可以了.
3, 在第2步完成会得到两个新的下标或者指针, 直接开比, 用while语句也可搞定, 条件为不到串结尾并且不是小数点
4, 如果有小数点, 去尾零, 可通过设置下标或者新的临时指针可搞
5, 去完尾零,首先检查两个长度是否一致, 不一致则不等, 一致, 再接着从小数点后第一位开比, 注意开比位置可以通过3步直接跳过小数一位得到, 一直比, 到结束, 中间有不同就不等, 否则就等
时间复杂度应该是长串长度O(N).一次扫描即可
设置一个变量记录查询次数,当这个变量的值到5的时候跳出循环就可以了啊
用break就可以跳出循环吧
在for循环里加一句 if(n==5) break;if(n==0) break;
或者可以在循环控制条件里改成n<5&&n!=0,用while循环语句也可以
不知道我说明白了没 不懂再追问
使用while循环,循环体内实现输入价格,并设置计数器,查询满五次时输出Thank you,之后break终止循环结束查询;循环体内用if条件语句若输入0,则直接输出Thank you,之后break终止循环结束查询。
5次循环 每次等待控制台输入价格 如果输入的是0 直接 输出thank you后 break
int一个变量存放查询次数,每进行一次查询将这个变量+1 。然后用if语句或者goto语句。
我试了下,可以出现 Thank you 啊
#includeint main(void){ int choice,i; printf("[1]Select apples\n"); printf("[2]Select pears\n"); printf("[3]Select oranges\n"); printf("[4]Select grapes\n"); printf("[0]exit\n"); for(i=1;i<=5;i++){ printf("Enter choices : "); scanf("%d",&choice); if(choice==0)break; else{ switch(choice){ case 1 :printf("apples price = 3.0\n");break; case 2 :printf("pears price = 2.5\n");break; case 3 :printf("oranges price = 4.1\n");break; case 4 :printf("grapes price = 10.2\n");break; default:printf("other price = 0.0\n");break; } } } printf("Thank you\n"); return 0;}

C语言课程设计

学生成绩的太多了,帮你找了一个图书管理的,希望能帮上忙,代码如下:
#include
#include
#include
#include
#include
#define LEN sizeof(struct booklist)
#define LEN2 sizeof(struct memberlist)
#define LEN3 sizeof(struct readers)
typedef struct readers//借书信息结构体
{
char name[30];//借书人的姓名
struct readers *next2;
}reader;
//书本信息结构体
typedef struct booklist
{
char num[20]; //书号
char name[30]; //书名
char concern[50];//出版社
char date[20];//出版日期
char author[20];//作者
int page;//页数
int price;//价格
int imformation;//图书剩余数量
reader *a;//借阅人
struct booklist *next;
}Book;
void creatlist();//创建新的书本信息
void print(Book *head);//打印书本信息
void save(Book *head);//储存书本信息
void AddBook();//添加书本信息
void DelBook();//删除书本信息
Book *read();//读取书本信息
void manager();//管理员操作
void Bookconsult(); //图书查询
int Borrow();//借书
int Return();//还书
Book *sort(Book *head);//书本信息按书号排序
void imformation();//系统信息
Book *head=NULL,*p1=NULL,*p2=NULL;
//创建新的书本信息
void creatlist()
{
int i,n;
printf("要创建的书本数目");
scanf("%d",&n);
p2=head=(Book *)malloc(LEN); //创建带有头结点的链表
p2->a=(reader *)malloc(LEN3);
p2->a->next2=NULL;
p2->next=NULL;
printf("请输入书的信息:\n");
for(i=1;i<=n;i++)
{
p1=(Book *)malloc(LEN);
printf("书号: "); scanf("%s",p1->num);
printf("书名: "); scanf("%s",p1->name);
printf("出版社: "); scanf("%s",p1->concern);
printf("出版日期: "); scanf("%s",p1->date);
printf("作者: "); scanf("%s",p1->author);
printf("书本页数: "); scanf("%d",&p1->page);
printf("书本价格(元): "); scanf("%d",&p1->price);
p1->a=(reader *)malloc(LEN3);
p1->a->next2=NULL;
p1->imformation=10;
p1->next=NULL;
p2->next=p1;
p2=p1;
if(i}
head=sort(head);
save(head);
print(head);
}
//打印书本信息
void print(Book *head)
{
Book *p=NULL;
reader *p0=NULL;
p=head->next;
printf("*******************************************************************************\n");
while(p!=NULL)
{
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);
printf("借阅图书的人:");
if(p->a->next2==NULL) printf("------------暂无借阅人!");
else
{
for(p0=p->a->next2;p0!=NULL;p0=p0->next2)
{
printf("%s ",p0->name);
}
}
p=p->next; /* p后移一个结点 */
printf("\n");
printf("\n");
}
}
//书本信息按书号排序
Book *sort(Book *head)
{
Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next;
p1=head2;
while(p1->next!=NULL)
{
min=p2=p1; /*把首结点作为最小值*/
while(p2->next!=NULL)
{
if(strcmp(min->num,p2->next->num)>0) /*首结点与下一结点比较*/
{
min2=p2;
min=p2->next;
}
p2=p2->next;
}
if(min!=p1)
{
min2->next=min->next; /*删除最小结点*/
min->next=p1; /*插入最小结点*/
if(p1==head2) head2=min;
else p3->next=min; /*p3为min前的结点指针*/
p3=min;
}
else
{
p3=p1;
p1=p1->next;
}
}
head->next=head2;
return(head);
}
//储存书本信息
void save(Book *head)
{
FILE *fp,*fp2;
Book *p=NULL;
reader *q=NULL;
fp=fopen("书本信息.txt","wb"); //printf("不能打开文件!\n");
fp2=fopen("借阅信息.txt","wb"); //printf("不能打开文件!\n");
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp); /*逐个结点写文件*/
for(q=p->a;q!=NULL;q=q->next2)
p=p->next;
}
fclose(fp);
fclose(fp2);
}
//添加书本信息
void AddBook()
{
FILE *fp,*fp2;
Book *addbook=NULL;
reader *p0=NULL;
fp=fopen("书本信息.txt","ab"); //追加方式打开文件
fp2=fopen("借阅信息.txt","ab");
addbook=(Book *)malloc(LEN);
printf("输入书本信息:\n");
printf("书号: "); scanf("%s",addbook->num);
printf("书名: "); scanf("%s",addbook->name);
printf("出版社: "); scanf("%s",addbook->concern);
printf("出版日期: "); scanf("%s",addbook->date);
printf("作者: "); scanf("%s",addbook->author);
printf("书本页数: "); scanf("%d",&addbook->page);
printf("书本价格(元): "); scanf("%d",&addbook->price);
p0=(reader *)malloc(LEN3);
p0->next2=NULL;
addbook->a=p0;
addbook->imformation=10;
addbook->next=NULL;
fwrite(addbook,LEN,1,fp); /*块写*/
fwrite(p0,LEN3,1,fp2);
fclose(fp);
fclose(fp2);
}
//读取书本信息
Book *read()
{
FILE *fp,*fp2;
Book *p=NULL,*p1=NULL,*head=NULL;
reader *p0=NULL,*p2=NULL;
if((fp=fopen("书本信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
if((fp2=fopen("借阅信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
head=(Book *)malloc(LEN);
fread(head,LEN,1,fp);
p1=head;
p0=(reader *)malloc(LEN3);
fread(p0,LEN3,1,fp2);
p0->next2=NULL;
head->a=p0;
head->next=NULL;
p=(Book *)malloc(LEN);
while(fread(p,LEN,1,fp)) /*逐个结点读取*/
{
p1->next=p;
p1=p1->next;
p0=(reader *)malloc(LEN3);
p1->a=p0;
while(fread(p0,LEN3,1,fp2))
{
if(p0->next2==NULL)
{
p2=p0;
p0=(reader *)malloc(LEN3);
break;
}

p2=p0;
p0=(reader *)malloc(LEN3);
p2->next2=p0;
}
free(p0);
p2->next2=NULL;
p=(Book *)malloc(LEN);
}
p1->next=NULL;
free(p);
fclose(fp);
fclose(fp2);
head=sort(head);
if(head!=NULL) return(head);
else
{
printf("文件为空!\n");
return 0;
}
}
//删除书本信息
void DelBook()
{
Book *head=NULL,*p=NULL,*q=NULL;
char bookname[30];
head=read();
printf("输入要删除的书名: ");
scanf("%s",bookname);
p=head;
while(p!=NULL)/*按名字查找要删除的图书*/
{
if(strcmp(p->name,bookname)==0)
{
if(p==head)
{
head=head->next;
break;
}
else
{
q->next=p->next;
break;
}
}
q=p;
p=p->next;
}
save(head);
}
//管理员操作
void manager()
{
int n,i=0,k=1;
while(k==1)
{
printf("********************************************************************************\n");
printf(" 请选择你需要的操作\n");
printf(" ◎ 1.建立新的书本信息\n");
printf(" ◎ 2.插入书本信息\n");
printf(" ◎ 3.删除书本信息\n");
printf(" ◎ 4.读取所有书本信息\n");
printf(" ◎ 5.读取指定书本信息\n");
printf(" ◎ 6.返回到上级目录\n");
printf(" ◎ 7.保存并退出\n");
printf("请输入:");
scanf("%d",&n);
switch(n)
{
case 1: creatlist();break;
case 2: AddBook();break;
case 3: DelBook();break;
case 4: head=read();system("CLS");print(head);break;
case 5: system("CLS");Bookconsult();break;
case 6: k=0;break;
default: k=0;break;
}
}
}
//图书查询
void Bookconsult()
{
int n,m=1,sign=0;
Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL;
reader *p2=NULL;
char a[30],b[20],c[20];
head=read();
while(m==1)
{
printf(" 请选择你查询书本的方式: 1.按书名 2.按书的编号 3.按书的作者 4.退出查询\n");
printf("输入=");
scanf("%d",&n);
switch(n)
{
case 1: printf("请输入书名:");
scanf("%s",a);
p0=head;
while(p0!=NULL)
{
if(strcmp(a,p0->name)==0)
{
printf("*******************************************************************************\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)

}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("没有这本书的信息.\n");
break;
case 2: printf("请输入书的编号:");
scanf("%s",b);
p0=head;
while(p0!=NULL)
{
if(strcmp(b,p0->num)==0)
{
printf("*******************************************************************************\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)

}
printf("\n");
break;
}
else p0=p0->next;
}
if(p0==NULL) printf("没有这本书的信息.\n");
break;
case 3: printf("请输入书的作者:");
scanf("%s",c);
p0=head;
while(p0!=NULL)
{
if(strcmp(c,p0->author)==0)
{
printf
("*******************************************************************************\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)

}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("没有这本书的信息.\n");
break;
default: m=0;break;
}
}
}
//借书
int Borrow()
{
char a[30],b[30],c;
Book *p0=NULL,*head=NULL;
reader *p2=NULL,*p3=NULL;
head=read();
printf("请输入要借的书的书号:");
scanf("%s",a);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(a,p0->num))==0)
{
if(p0->imformation>0)
{
printf("图书在馆,可以借出,是否确定借出?'y'or'n'\n");
c=getchar();
scanf("%c",&c);
if(c=='y')
{
printf("请再次输入你的用户名:");
scanf("%s",b);
p3=(reader *)malloc(LEN3);
strcpy(p3->name,b);
if(p0->a->next2==NULL)
{
p0->a->next2=p3;
p3->next2=NULL;
}
else
{
for(p2=p0->a;p2->next2!=NULL;p2=p2->next2);
p2->next2=p3;
p3->next2=NULL;
}
--p0->imformation;
save(head);
printf("操作完成,可以带走图书。\n");
return 1;
break;
}
else
{
return 0;
break;
}
}
else printf("很抱歉,该图书不在馆.\n");return 0;break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("很抱歉,没有这本书。\n");
return 0;
}
else return 2;
}
//还书
int Return()
{
Book *p0=NULL,*head=NULL;
reader *p2=NULL,*p3=NULL;
char c[20],b[30];
head=read();
printf("请输入要还的书的书号:");
scanf("%s",&c);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(c,p0->num))==0)
{
printf("请输入你的用户名:");
scanf("%s",&b);
if(p0->a->next2==NULL)
else
{
p3=p0->a;
p2=p3->next2;
while(p2!=NULL)
{
if(strcmp(p2->name,b)==0)
{
if(p2->next2==NULL)
else
{
p3->next2=p2->next2;
free(p2);
break;
}
}
else
{
p3=p2;
p2=p2->next2;
}
}
if(p2==NULL) printf("你没有借这本书!\n");
}
++p0->imformation;
save(head);
printf("书已归馆,操作完成。\n");
return 1;
break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("没有这本书。\n");
return 0;
}
else return 2;
}
//借书信息
void imformation()
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ 欢迎你使用我们的图书管理系统!以下是本系统的有关说明: ※\n");
printf("※本系统主要功能是进行图书的有关管理,你可以进行图书信息的创建、插入、删除、 ※\n");
printf("※查询;在操作中主要是以阿拉伯数字来选择相应的菜单功能,在选择时以'y'表示 '是' ※\n");
printf("※以'n'表示'不是'。在你操作的时候就会有相应的操作提示。 ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}
main()
{
int n,k=1;
printf("********************************************************************************\n");
printf("\n\n");
printf(" 欢迎进入我们的图书管理系统! \n");
printf("\n\n");
printf("********************************************************************************\n");
while(k==1)
{
printf(" 请选择你的操作: 1.管理员操作 2.系统信息 3.退出系统\n");
printf("********************************************************************************\n");
printf(" 你的选择是:");
scanf("%d",&n);
system("CLS");
switch(n)
{
case 1: manager();break;
case 2: imformation();break;
default: printf("+++++++++++++++++++++++++++欢迎你再次使用我们的系统!++++++++++++++++++++++++++++\n");k=0;break;
}
}
}

C语言课程设计报告要求

1 需求分析
确定要做什么,需要什么。
2 设计思路
确定要怎么做,设计出一个大概的方向。说明为什么要这么做。
3 设计流程图
确定具体要如何做。
4 代码实现
真正形成代码。
5 测试用例
对代码测试,即如何验证程序是有效的。
写清楚这几项就可以了。 一般老师会给模板。照着写就行。
实验标题
实验具体内容
实验要求
实验结果
实验分析
  一 、 设计题目
  万年历的设计
  二 、设计要求
  1、能够显示星期;
  2、能够显示年月日;
  3、能够修改;
  4、当系统时间变动时,能自动跳到相应的时间。
  三 、 设计目的
  1. 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!
  2. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
  四 、设计思想及过程
  【一】由于万年历具有以下特点:
  1。平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
  由于公元1月1日设为星期六,故3月1日为星期三。 ——注意这个“三”
  为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
  2。每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)
  所以百年%4=0闰或(年%4=0并且年<>0)闰。
  3。每 4年(3个平年+1个闰年)共208周+5天 ——注意这个“5天”
  每百年共100*(208周+5天)-1天=5217周+5天 ——注意这个“5天”(整百年暂设为平年)
  每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和
  “1天”(4个整百年只有一个闰年)
  即400年一轮回!(原来万年历400年前是一家)
  【二】根据万年历以上特点进行编写:
  首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义另一个函数#define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0当为闰年时可得1加上该程序便可得到每月的天数。 具体程序见(五、万年历程序)
  再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)
  由于其公式为:
  某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7
  某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7
  或 某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
  闰4百年3月1日星期算法(百年%4=0)
  其公式为:
  某年3月1日星期几=(年+年/4+月星期表+日+2天)%7
  例:0000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
  1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
  2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
  2001年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四
  2004年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一
  2008年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六
  2042年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六
  平4百年3月1日星期算法(百年%4<>0)
  其公式为:
  某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
  例:1700年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注意:1700年是平年)
  1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:1800年是平年)
  1900年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注意:1900年是平年)
  1901年3月1日星期几=(19%4*5+1+1/3+0+1+2)%7=19%7=星期五
  1918年3月1日星期几=(19%4*5+18+18/4+0+1+2)%7=(15+22+3)%7=40%7=星期五
  1958年3月1日星期几=(19%4*5+58/4*5+58%4+3)%7=(15+70+2+3)%7=90%7=星期六
  1988年3月1日星期几=(19%4*5+88/4*5+88%4+3)%7=(15+110+0+3)%7=128%7=星期二
  1999年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3+3)%7=141%7=星期一
  2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)
  2101年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7=9%7=星期二
  2102年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7=10%7=星期三
  2103年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7=11%7=星期四
  2104年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7=9%7=星期二(注意:2104年是闰年)
  9999年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3+3)%7=141%7=星期一
  注:按400年一轮回!(400年前是一家)的说法
  1600年,2000年是一样的;
  1700年,2100年是一样的;
  1800年,2200年是一样的;
  1900年,2300年是一样的。
  其中万年某日星期算法
  其公式为:
  某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
  通同星期偏差表
  闰年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
  天数 31 29 31 30 31 30 31 31 30 31 30 31
  星期 3 6 0 3 5 1 3 6 2 4 0 2
  平年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
  天数 31 28 31 30 31 30 31 31 30 31 30 31
  星期 4 0 0 3 5 1 3 6 2 4 0 2
  为对以上的万年历星期的算法是正确的对其进行了以下的计算:
  ⒈对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
  1900年元旦 1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4
  1月表=4(平年) 故 4+4=1 即1900年元旦是星期一
  1949年国庆 1日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=2
  10月表=4(平年) 故 4+2=6 即1949年国庆是星期六
  1999年12月31日 31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3
  12月表=2(平年) 故 2+3=5 即1999年12月31日是星期五
  ⒉对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
  2000年元旦 1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3
  1月表=3(闰年) 故 3+3->6 即2027年元旦是星期六
  2018年春节 16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5
  2月表=0(平年) 故 0+5=5 即2018年春节是星期五
  2099年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2
  12月表=2(平年) 故 2+2=4 即2099年12月31日是星期四
  对于上面的分析以及公式的推论和计算证明可以对万年历中的星期进行了编写具体编写程序见(五 、万年历程序)中。
  五 、万年历源程序
  #include"stdio.h"
  #include"dos.h"
  #include"conio.h"
  #include"stdlib.h"
  #define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0 /*判断闰年*/
  int numofMonth(int y,int m){
  int day,t=28;
  if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
  day=31; /*定义以上月份为31天*/
  else if(m==4||m==6||m==9||m==11)
  day=30; /*定义以上月份为30天*/
  else{t+=Year(y);
  day=t;} /*闰年二月29天,平年28天*/
  return day;}
  int numofYear(int y){
  int t=365; /*平年365天*/
  t+=Year(y);/*闰年366天*/
  return t;}
  int numofbeforeDays(int y,int m,int d){
  int sum=d,i;
  for(i=1;i  sum+=numofMonth(y,i);
  return sum;}
  int numofafterDays(int y,int m,int d){
  int sum=0,i;
  for(i=m;i<=12;i++)
  sum+=numofMonth(y,i);
  sum-=d;
  return sum;}
  int isDay(int y,int m,int d){
  int year=1900,month=1,week=1,i; /*定义万年历是从1900年开始*/
  long sum=0;
  for(i=year;i  sum+=numofYear(i);
  for(i=1;i  sum+=numofMonth(y,i);
  /* ++sum;*/
  i=sum%7;
  week=(week+i)%7;
  return week;}
  void empty(int n){
  int i;
  for(i=0;i  printf("%*c",6,' ');}
  void OutPutCalender(int y,int m,int d)/*计算x年x月x是星期几*/{
  int week,i,num,t;
  week=isDay(y,m,1);
  printf("%6d/%02d/%02d\n",y,m,d);
  printf("%6s%6s%6s%6s%6s%6s%6s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
  empty(week);
  num=numofMonth(y,m);
  for(i=1;i<=num;i++){
  printf("%6d",i);
  t=(week+i)%7;
  if(t==0)
  printf("\n");} /*光标移到下一行*/
  printf("\n");}
  long numBTDays(int y1,int m1,int d1,int y2,int m2,int d2)/*定义两个不同日期*/{
  int i;
  long sum=0;
  for(i=y1+1;i  sum+=numofYear(i);
  if(y1==y2){ sum-=d1;
  for(i=m1;i  sum+=numofMonth(y1,i);
  sum+=d2;}
  else{sum+=numofafterDays(y1,m1,d1);
  sum+=numofbeforeDays(y2,m2,d2);}
  return sum;}
  int Select_mean(){
  int sm;
  printf("1. OutPut Calender\n"); /*输出当前月份的日历*/
  printf("2. Help\n"); /*帮助*/
  printf("0. Quit\n"); /*退出*/
  printf("Please enter choose(0--2):"); /*从0-2中选择*/
  do
  scanf("%d",&sm); /*输入sm*/
  while(sm<0||sm>3);
  return sm;}
  void Help()/*输出帮助栏的内容*/{
  printf(" 1. OutPut Calender\n");
  printf(" 2. System Help\n");
  printf(" 0. Quit\n");
  printf("Page Up: Up year\n"); /*上一年*/
  printf("Page Down: next year\n"); /*下一年*/
  printf(" --> : next month\n"); /*上一月*/
  printf(" <-- : Up month\n");/*下一月*/}
  main(){
  int year=2006,year1=2006,month,day,y1,m1,d1,y2,m2,d2,c,t; /*定义运行后的日期是2006年*/
  int inkeySCAN,inkey; /*输入键盘操作信息*/
  union REGS inregs,outregs;
  inregs.h.ah=0x2a;
  intdos(&inregs,&outregs);
  /* year=outregs.xcx; */
  month=outregs.h.dh;
  day=outregs.h.dl;
  year1=year;
  printf("%d/%02d/%02d\n",year,month,day);
  while(1)/*当选择为1时,执行以下语句*/{
  switch(Select_mean()){
  case 1:
  OutPutCalender(year,month,day);
  while(1){
  inkey=bioskey(0);
  inkeySCAN=(inkey&0xFF00)>>8;
  if(inkeySCAN==77){
  if(month==12){month=1;year1++;
  OutPutCalender(year1,month,day);/*输出日历*/}
  else{month++;
  OutPutCalender(year1,month,day);
  }}
  if(inkeySCAN==75){
  if(month==1){month=12;year1--;
  OutPutCalender(year1,month,day);}
  else{month--;OutPutCalender(year1,month,day);}}
  if(inkeySCAN==73){
  if(year1==1900) year1=year;
  else{year1--;OutPutCalender(year1,month,day);}}
  if(inkeySCAN==81){
  year1++;OutPutCalender(year1,month,day);}
  if(inkeySCAN==28)break;}
  break; /*终止循环*/
  case 2:
  Help();
  break;
  case 0:
  exit(0);
  default:
  printf("Enter ERROR!\n");
  break;} }
  }
  六 运行过程
  1.双击TC
  1. 当对上面的程序进行了调试后运行会出现下面所示:
  第一行所显示的就是系统时间!满足了第一条要求“显示年、月、日”。
  而当改变系统时间后!再运行该程序上面的日期也随系统时间改变,所以满足第四条“当系统时间变动时,能自动跳到相应的时间。”
  2. 在光标处按下“1”后回车,将会显示:
  以上的显示也证明了条件的第2条可以“显示星期!”
  3. 在光标处按下“2”后回车,将会显示:
  按着帮助所讲进行了运行可知:按“ Page Up ”键其下面接着会显示上一年该月的万年历,按“ Page Down ”键其下面会接着显示下一年该月的万年历;按“ ← ”键下面将会接着显示当年上一个月的万年历,按“ → ”键将会接着在下面显示去下一个月的万年历。
  4.
  由上所显示键入“0”后将会退去该程序。
  由以上运行的结果可知该c语言所设计的万年历满足设计要求!
  七、在C语言编程中常见错误
  C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,我通过这次编程,也积累了一些C编程时常犯的错误:
  1. 书写标识符时,忽略了大小写字母的区别。
  编译程序把a和A认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
  2.忽略了变量的类型,进行了不合法的运算。
  %是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
  3.将字符常量与字符串常量混淆。
  混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
  4.忽略了“=”与“==”的区别。
  在C语言中,“=”是赋值运算符,“==”是关系运算符。如:
  if (a==3) a=b;
  前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
  5.忘记加分号。
  分号是C语句中不可缺少的一部分,语句末尾必须有分号。
  a=1 b=2
  编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
  { z=x+y;
  t=z/100;
  printf("%f",t);
  }
  对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
  6.多加分号。
  对于一个复合语句,如:
  { z=x+y;
  t=z/100;
  printf("%f",t);
  };
  复合语句的花括号后不应再加分号,否则将会画蛇添足。
  又如:
  if (a%3==0);
  I++;
  本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
  再如:
  for (I=0;I<5;I++);
  {scanf("%d",&x);
  printf("%d",x);}
  本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
  7.输入变量时忘记加地址运算符“&”。
  int a,b;
  scanf("%d%d",a,b);
  这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
  8.输入数据的方式与要求不符。scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
  3,4
  输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
  scanf("%d,%d",&a,&b);C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
  3,4
  此时不用逗号而用空格或其它字符是不对的。
  3 4 3:4
  又如:
  scanf("a=%d,b=%d",&a,&b);
  输入应如以下形式:
  a=3,b=4
  9.输入字符的格式与要求不一致。
  在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
  scanf("%c%c%c",&c1,&c2,&c3);
  如输入a b c
  字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
  10.输入输出的数据类型与所用格式说明符不一致。
  例如,a已定义为整型,b定义为实型
  a=3;b=4.5;
  printf("%f%d\n",a,b);
  语法错
  逻辑错 运行错
  0.忘记定义变量:
  main()
  {x=3;y=6;
  printf(“%d\n”,x+y);
  11.C语言的变量一定要先定义才能使用;
  12.输入输出的数据的类型与所用格式说明符不一致
  int a=3;float b=4.5;printf(“%f%d\n”,a,b);
  它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)
  13.未注意int型数据的数值范围
  int型数据的数值范围(-32768~32768)
  int num=89101;
  printf(“%d”,num);
  会将超过低16位的数截去从而得到23563
  注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
  14.输入变量时忘记使用地址符
  scanf(“%d%d”,a,b);
  15.输入时数据的组织与要求不符
  对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
  16.误把”=“作为”等于”比较符
  “=“为附值运算符
  “==“为比较运算符
  17.语句后面漏分号
  {
  t=a;
  a=b;
  b=t
  }
  它是pascal的语法
  18.不该加分号的地方加了分号
  if(a>b);
  printf(“a is larger than b\n”);
  for(i=0;i<10;i++);
  {
  scanf(“%d”,&x);
  printf(“%d\n”,x*x);
  }
  19.对应该有花括弧的复合语句,忘记加花括弧
  sum=0;
  i=1;
  while(i<=100)
  sum=sum+1;
  i++;
  20.括弧不配对
  while((c=getchar()!=‘#’)
  putchar(c);
  11.在用标识时,忘记了大写字母和小写字母的区别
  {
  int a,b,c;
  a=2;
  b=3;
  C=A+B;
  printf(“%d+%d=%D”,A,B,C);
  }
  12.引用数组元素时误用发圆括弧
  {
  int i,a(10);
  for(i=0;i<10;i++)
  scanf(“%d”,&a(i));
  }
  13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值
  {
  int a[10]={1,2,3,4,5,6,7,8,9,10};
  int i;
  for(i=1;i<=10;i++)
  printf(“%d”,a[i]);
  }
  14.对二维或多维数组的定义和引用的方法不对
  {
  int a[5,4];
  …
  printf(“%d”,a[1+2,2+2]);
  …
  }
  15.误以为数组名代表数组中全部元素
  {int a[4]={1,2,3,4};
  printf(“%d%d%d%d”,a);
  }
  16.混淆字符数组与字符指针的区别
  main()
  {
  char str[40];
  str=“Computer and c”;
  printf(“%s\n”,str);
  }
  17.在引用指针变量之前没有对它赋予确定的值
  {
  char *p;
  scanf(“%s”,p);
  }
  {
  char *p,c[20];
  p=c;
  scanf(“%s”,p);
  }
  18.switch语句的各分支中漏写 break语句
  混淆字符和字符串的表示形式
  …
  char sex;
  sex=“M”;
  …
  19.使用自加(++)和自减(--)运算符时出的错误
  {
  int *p,a[5]={1,3,5,7,9};
  p=a;
  printf(“%d”,*p++);
  }
  注意于*(++p)的区别;
  20.所调用的函数在调用语句之后才定义,而又在调用前未加说明
  main()
  {float x,y,z;
  x=3.5;y=-7.6;
  z=max(x,y);
  printf(“%f”,z);
  }
  编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
  八、心得体会
  1. 目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。
  2. 经过上一个学期对《C程序设计》的学习,我们学习了理论知识,了解了C语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
  3. 通过对c语言万年历的设计进一步的巩固了用c语言编写程序,并且有利于更好的掌握c语言!
  4. 在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的必要性和重要性!
  5. 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
  6. 由于C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c语言程序设计更加了解了c语言的好处和其可用性!
  7. 在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?
  8. 在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!
  九、参考文献
  ⒈谭浩强编著.C程序设计第二版〔M〕.北京:清华大学出版社,1999
  ⒉陈朔鹰,陈英编著.C语言趣味程序百例精解〔M〕.北京:北京理工大学出版社,1994
  ⒊电脑知识与技术学术交流版〔J〕2005.2 (备注:来自网络资源)
  ⒋Herbert Schildit著. 戴健鹏译. C语言大全 (第二版)〔M〕.北京:电子工业出版社,1994
  ⒌谭浩强,张基温,唐永炎编著. C语言程序设计教程.〔M〕北京: 高等教育出版社,1992
  ⒍秦友淑,曹化工编著. C语言程序设计教程. 〔M〕武汉:华中理工大学出版社,1996
  ⒎曹衍龙,林瑞仲,徐慧 编著.C语言实例解析精粹 〔M〕北京:人民邮电出版社,2005.3
  ⒏黄明等编著.21世纪进阶辅导C语言程序设计. 〔M〕大连理工大学出版

C语言课程设计:计算机设备管理系统(非常着急 恳请各位帮忙 超高悬赏)

这个行不?
#define N 100
#include
#include
#include
/*声明*/
void myprint();
int mycreat(struct shebei_type*p,int n);
void mydisplay(struct shebei_type*p,int n);
void mysearch(struct shebei_type*p,int n);
void mymodify(struct shebei_type*p,int n);
int myadd(struct shebei_type*p,int n);
int mydelete(struct shebei_type*p,int n);
void mysort(struct shebei_type*p,int n);
void sch_num(struct shebei_type*p,int n);
void sch_name(struct shebei_type*p,int n);
void mystatic(struct shebei_type*p,int n);
int loadinfo(struct shebei_type*p,int n);
int saveinfo(struct shebei_type*p,int n);
struct date
{ int year;
int month;
int date;
};
struct shebei_type
{int num;
char name[10];
char kind[10];
int price;
struct date time;
char lab[10];
int amount;
}
/*主程序*/
main()
{char choose,yes_no;
struct shebei_type record[N];
int total=0,flag;
total=loadinfo(record,N);
do
{
myprint();
printf(" 请选择: ");
choose=getche();
switch(choose)
{
case 1: mycreat(record,total);break;
case 2: mydisplay(record,total);break;
case 3: mysearch(record,total);break;
case 4: mymodify(record,total);break;
case 5: myadd(record,total);break;
case 6: mydelete(record,total);break;
case 7: mysort(record,total);break;
case 8: flag=saveinfo(record,total);
if( flag == 1 )
{
printf( "\n保存成功!\n" );
}
else
{
printf( "\n保存失败\n" );
}
break;
case 9:mystatic(record,total);break;
case 0:break;
default:
printf("\n %c为非法选项!\n",choose);
}
if(choose=='0')break;
printf("\n 要继续选择吗(Y/N)?");
do
{
yes_no=getche();
}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}
while(yes_no!='Y'||yes_no!='y');
}
/*界面*/
void myprint();
{
printf("\n");
printf("************************");
printf(" 实验室设备管理系统 ");
printf("***********************");
printf(" 请输入选项编号(0--7) \n");
printf(" 1--创建设备信息 \n");
printf(" 2--显示设备信息 \n");
printf(" 3--查询设备信息 \n");
printf(" 4--修改设备信息 \n");
printf(" 5--添加设备信息 \n");
printf(" 6--删除设备信息 \n");
printf(" 7--排序设备信息 \n");
printf(" 8--保存设备信息 \n");
printf(" 9--统计设备信息 \n");
printf(" 0--退出 \n");
}
/*载入信息*/
int loadinfo(struct shebei_type*p,int n)
{
FILE *fp;
int i,all=0;
char filename[30]="tx1.dat";
fp=fopen(filename, "r");
if ( fp == NULL )
{
return 0;
}
fscanf(fp,"%d\n",&all);
for( i = 0; i < all; i++ )
{
fscanf( fp,"%s%s%f%f%f%f\n",p[i].num ,p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i]kind );
}
fclose(fp);
return all;
}
/*保存信息*/
int saveinfo(struct shebei_type*p,int n)
{
FILE *fp;
int i; int all=0;
char filename[30]="tx1.dat";
fp = fopen ( filename,"w");
if ( fp == NULL)
{
printf( "\n***不能建立或打开文件%s!", filename );
return 0;
}
fprintf( fp, "%d\n", n );
for ( i = 0; i < n; i++ )
{
fprintf( fp, "%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].kind ,p[i].price ,p[i].time ,p[i].lab );
}
fclose(fp);
return 1;
}
/*显示信息*/
void mydisplay(struct shebei_type*p,int n)
{
int i = 0;
printf("\n");
printf("-----------------------------------------------\n");
printf(" 编号 分类 名称 价格 购买时间 所属实验室\n");
while( i < n )
{
printf("%8s%8s%8.2f%8.2f%8.2f\n", p->num , p->kind , p->name , p->price , p->time , p->lab);
p++;
i++;
}
}
/*输入信息*/
int mycreat(struct shebei_type*p,int n)
{
int i;
int m;
printf("\n请输入要输入设备的个数(<%d): ",N);
scanf("%d",&m);
i=0;
while(i{
printf("\n");
printf("请输入第%d个记录:\n",i+1);
printf("编号:");
do
{
scanf( "%s",p->num);
}
while(strcmp(p->num,"")==0);
printf("名称:");
scanf( "%s",p->name );
printf("类别:");
scanf( "%f", &p->kind );
printf( "购买时间:" );
scanf( "%f", &p->time );
printf("所属实验室:");
scanf( "%f", &p->lab );
rintf("购买价格:");
scanf( "%f", &p->price );
i++;
p++;
}
return m+n;
}
/*查找*/
void mysearch(struct shebei_type*p,int n)
{
char c;
mydisplay(p,n);
printf("\n按不编号查询(h),还是按名称查询(m)?");
c=getche();
if(c=='h'||c=='H')
sch_num(p,n);
else if(c=='m'||c=='M')
sch_name(p,n);
else
printf("\n非法字符!\n");
}
/*按编号查找*/
void sch_num(struct shebei_type*p,int n)
{
int i,flag=0;
char nm[10];
printf("\n请输入要查设备的编号:");
gets(nm);
for(i=0;iif(strcmp(nm,p[i].num)==0)
{
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
printf("%8s%8s%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab , p[i].kind);
flag=1;
}
if(flag==0)
printf("无此设备!\n");
}
/*按名称查询*/
void sch_name(struct shebei_type*p,int n)
{
int i,flag=0;
char nam[10];
printf("\n请输入要查设备的名称:");
gets(nam);
for(i=0;iif(strcmp(nam,p[i].name)==0)
{
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
printf("%8s%8s%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind);
flag=1;
}
if(flag==0)
printf("无此设备!\n");
}
/*修改信息*/
void mymodify(struct shebei_type*p,int n)
{
int i;
char nam[10];
mydisplay(p,n);
printf("\n 请输入要修改的名称:");
gets(nam);
for(i=0;i{
if(strcmp(nam,p->name)==0)break;
}
if(i==n)
printf("无此设备!\n");
else
{
printf("请输入正确的编号:");
do
{
scanf( "%s",p->num);
}
while(strcmp(p->num,"")==0);
printf("请输入正确的名称:");
scanf( "%s",p->name );
printf("请输入正确的价格:");
scanf( "%f", &p->price );
printf( "请输入正确的购买时间:" );
scanf( "%f", &p->time );
printf("请输入正确的所属实验室:");
scanf( "%f", &p->lab );
printf("请输入正确的类别:");
scanf( "%f", &p->kind );
}
}
/*增加信息*/
int myadd(struct shebei_type*p,int n)
{
int i=0;
char c;
struct shebei_type t,*q;
/*clscr();*/
printf("添加前的记录: \n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
i=0;
q=p;
/*显示原有记录信息*/
while(i{
printf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n", q->num , q->name , q->price , q->time , q->lab , q->kind );
i++;
q++;
}
do
{
printf("请输入新记录的编号: \n");
do
{
scanf( "%s",t.num );
}
while(strcmp(p->num,"")==0);
/*不能为空*/
printf("请输入新记录的名称: ");
scanf( "%s",t.name );
printf("请输入新记录的价格:");
scanf( "%f", &t.price );
printf( "请输入新记录的购买时间:" );
scanf( "%f", &t.time );
printf("请输入新记录的所属实验室:");
scanf( "%f", &t.lab );
printf("请输入新记录的类别:");
scanf( "%f", &t.kind );
for(i=0;iif(strcmp(t.num,(p+i)->num)==0)
{
printf("编号重复,要重新输入吗(Y/N)?");
c=getche();
putchar('\n');
break;
}
/*找到最后没有重复*/
if(i==n)
{
*(p+i)=t;
printf("添加后的纪录:\n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
break;
}
}
while(c=='y'||c=='Y');
return n+1;
}
/*删除信息*/
int mydelete(struct shebei_type*p,int n)
{
int i,x;
char c,nm[10],nam[10];
printf("\n删除前的记录: \n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
printf("按编号删除(h),还是按名称删除(m)?");
c=getche();
if(c=='h'||c=='H')
{
printf("\n请输入要删除记录的编号: ");
gets(nm);
for(x=0;xif(strcmp(nm,p[x].num)==0)
{
return n-1;
break;
}
if(x{
for
(i=x;i{
p[i]=p[i+1];
}
printf("删除后的记录: \n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
}
else
printf("无此设备\n");
}
else
if(c=='m'||c=='M')
{
printf("\n请输入要删除记录的名称: ");
gets(nam);
for(x=0;xif(strcmp(nam,p[x].name)==0)
{
return n-1;
break;
}
if(x{
for(i=x;i{
p[i]=p[i+1];
}
printf("删除后的记录: \n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
}
else
printf("无此设备\n");
}
else
{
printf("\n非法字符\n");
return n;
}
}
/*排序*/
void mysort(struct shebei_type*p,int n)
{
int j,i,k;
char c1,c2;
struct lab temp;
/*clrscr()*/
printf("排序前的记录:\n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
printf("按价格排序(c),按时间排序(m),按类别排序(e),按编号排序(k),按实验室排序(a)?");
c1=getche();
/*按价格排序*/
if(c1=='c'||c1=='C')
{
for(i=0;i{
k=i;
for(j=i;jif( p[k].price >p[j].price )
k=j;
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
printf("\n排序后的记录:\n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
}
/*按时间排序*/
else if(c1=='m'||c1=='M')
{
for(i=0;i{
k=i;
for(j=i;jif( p[k].time > p[j].time )
k=j;
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
printf("\n排序后的记录:\n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
}
/*按类别排序*/
else if(c1=='e'||c1=='E')
{
for(i=0;i{
k=i;
for(j=i;jif( p[k].kind > p[j].kind )
k=j;
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
printf("\n排序后的记录:\n");
printf("编号 名称 价格 够买时间 所属实验室 类别\n");
for(i=0;iprintf("%8s%8s%8.2f%8.2f%8.2f%8.2f\n",p[i].num ,
p[i].name ,p[i].price ,p[i].time ,p[i].lab ,p[i].kind );
}
/*统计信息*/
sort_amount()
{ struct shebei_type *p,*q[MAX];
int i,j,k;
clrscr();
printf("\n 库存排行\n");
printf("---------------------------------------------------------------------\n");
printf("\n 排名 设备号 设备名称 设备类别 设备价格 设备购买时间 设备所属实验室\n");
p=shebei;
for(i=0;iq[i]=p++;
for(i=0;i{ k=i;
for(j=i+1;jif(q[k]->amountamount) k=j;
if (k!=i)
{ p=q[i];q[i]=q[k];q[k]=p;}
}
for(i=0;iprintf("\n%4d %6d %8s %11s %4d %d-%d-%d %4s\n",
i+1,q[i]->num,q[i]->name,q[i]->kind,q[i]->price,q[i]->time,q[i]->lab);
bioskey(0);
}
/*排序函数*/
void mystatic(struct shebei_type*p,int n)()
{int choice;
do
{ clrscr();
printf("\n\n\n **********设备排行信息**********\n\n");
printf(" 1.库存排行\n\n");
printf(" 0.返回主菜单\n\n");
printf(" 请选择(0-1):");
scanf("%d",&choice);
switch(choice)
{ case 1:sort_amount();break;
case 0:break;
}
}while(choice!=0);
}
}

C语言课程设计

3、班级通讯录管理系统设计与实现 以本班同学的具体数据为背景,设计一个本班同学实现以下功能: 1)通讯录编辑(添加、删除) ; 2)按不同的项进行查找; 3)对已存在的通讯录按不同的项排序; 4)将通讯录写入文件; 5)从文件读入通讯录。 备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。
链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag 提取码: 1111
6、成绩记录簿设计与实现 实现以下功能: 1)创建信息并以磁盘文件保存; 2)读取磁盘文件并显示输出所有学生的成绩; 3)按学号或姓名查询成绩; 4)添加成绩记录; 5)修改指定姓名或学号的学生的成绩并可存盘; 6)显示输出60分以下、60 79、80 89、90分以上各分数段的学生信息。 备注:每个学生信息包括:学号、姓名、C语言成绩。
链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag 提取码: 1111
7、学生籍贯信息记录簿设计与实现 实现以下功能: 1)创建信息并以磁盘文件保存; 2)读取磁盘文件并显示输出所有学生的籍贯信息; 3)按学号或姓名查询其籍贯; 4)按籍贯查询并输出该籍贯的所有学生; 5)能添加、删除和修改学生的籍贯信息; 6)显示输出四川籍和非四川籍学生的信息并可分别存盘。 备注:每个学生信息包括:学号、姓名、籍贯
链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag 提取码: 1111
9、图书信息管理系统设计与实现 实现以下功能: 1)系统以菜单方式工作; 2)图书信息录入功能(图书信息用文件保存); 3)图书信息浏览功能; 4)查询和排序功能; 备注:图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag 提取码: 1111
10、学生信息管理系统设计与实现 实现以下功能: 1)系统以菜单方式工作; 2)学生信息录入功能(学生信息用文件保存) ; 3)学生信息浏览功能; 4)查询、排序功能(至少两种查询依据和两种排序依据); 5)学生信息删除、修改功能。 备注:学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E- mail等。
链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag 提取码: 1111
12、职工工作量统计系统设计与实现 完成以下功能: 1)输入职工工号和完成的产品数量,程序允许同- -职工有多次输入,由程序对 其完成的产品数量实现累计; 2)按完成数量对职工排序,并确定名次; 3)按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们 的工号(工号由小到大顺序输出)。
链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag 提取码: 1111