c语言课程设计作业.docx
《c语言课程设计作业.docx》由会员分享,可在线阅读,更多相关《c语言课程设计作业.docx(15页珍藏版)》请在冰豆网上搜索。
c语言课程设计作业
C语言课程设计第二节课作业
通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
1从文件操作角度分析。
1)进入主界面:
要求输入密码,输入三次错误系统锁定。
2)输入记录:
将学生的基本信息包括学号,姓名,性别,地区,分数等数据作为一个记录写入文件。
3)显示记录:
显示学生的各项信息。
4)增加记录:
增加多个学生的基本信息,位于之前的学生后面。
5)删除记录:
删除学生信息。
6)修改记录:
可以修改学生的任何一项基本信息。
7)查找记录:
可以根据学生的学号查找并显示出学生的信息。
8)统计记录:
统计全班通过情况和不及格情况。
9)退出系统
2从结构化程序和函数角度分析。
1)enter()定义进入函数
2)input()定义输入函数
3)display()定义显示函数
4)add()定义增加函数
5)delet()定义删除函数
6)amend()定义修改函数
7)preside()定义统计函数
8)fint()定义查找函数
9)output()定义退出函数
3结构体的作用和应用。
在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。
显然不能用一个数组来存放这一组数据。
因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。
为了解
决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。
4如果设计一个产品管理系统,如何来设计。
1、系统以菜单方式工作,密码登陆。
2、商品信息的录入功能(增加数据)。
用数组数据类型赋初值的方法把商品信息送到各个数组中(但注意要是合法数据),然后把它们输出显示。
3、商品信息的删除(删除数据)。
任意输入一个商品的编号,将它所有的信息从组数中删除。
4、商品信息的浏览功能(查找数据)。
任意输入一个商品的编号,打印出他的所有数据。
要求能多次查找。
5、商品信息的删除(修改数据)。
任意输入一个商品的编号,打印出所有相关信息后,可对某一项信息进行修改并保存。
6、商品信息的计算并排序。
计算所有商品的总价格及平均价格(aver,单精度,输出一位小数),将包括所有数据的数组元素按价格从低到高的顺序排序打印出来。
5把自己修改的产品管理(或者图书管理\职工管理等)系统的代码贴到博客中。
图书管理系统
#include
#include
#include
#include
structbooks_list
{
charauthor[20];/*作者名*/
charbookname[20];/*书名*/
charpublisher[20];/*出版单位*/
charpbtime[15];/*出版时间*/
charloginnum[10];/*登陆号*/
floatprice;/*价格*/
charclassfy[10];/*分类号*/
structbooks_list*next;/*链表的指针域*/
};
structbooks_list*Create_Books_Doc();/*新建链表*/
voidInsertDoc(structbooks_list*head);/*插入*/
voidDeleteDoc(structbooks_list*head,intnum);/*删除*/
voidPrint_Book_Doc(structbooks_list*head);/*浏览*/
voidsearch_book(structbooks_list*head);/*查询*/
voidinfo_change(structbooks_list*head);/*修改*/
voidsave(structbooks_list*head);/*保存数据至文件*/
/*新建链表头节点*/
structbooks_list*Create_Books_Doc()
{
structbooks_list*head;
head=(structbooks_list*)malloc(sizeof(structbooks_list));/*分配头节点空间*/
head->next=NULL;/*头节点指针域初始化,定为空*/
returnhead;
}
/*保存数据至文件*/
voidsave(structbooks_list*head)
{
structbooks_list*p;
FILE*fp;
p=head;
fp=fopen("data.txt","w+");/*以写方式新建并打开data.txt文件*/
fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n");/*向文件输出表格*/
fprintf(fp,"┃登录号┃书名┃作者┃出版单位┃出版时间┃分类号┃价格┃\n");
fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");
/*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/
while(p->next!
=NULL)
{
p=p->next;
fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);
}
fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");
fclose(fp);
printf("已将图书数据保存到data.txt文件\n");
}
/*插入*/
voidInsertDoc(structbooks_list*head)
{
/*定义结构体指针变量s指向开辟的新结点首地址p为中间变量*/
structbooks_list*s,*p;
charflag='Y';/*定义flag,方便用户选择重复输入*/
p=head;
/*遍历到尾结点,p指向尾结点*/
while(p->next!
=NULL)
{
p=p->next;
}
/*开辟新空间,存入数据,添加进链表*/
while(flag=='Y'||flag=='y')
{
s=(structbooks_list*)malloc(sizeof(structbooks_list));
printf("\n请输入图书登陆号:
");
fflush(stdin);
scanf("%s",s->loginnum);
printf("\n请输入图书书名:
");
fflush(stdin);
scanf("%s",s->bookname);
printf("\n请输入图书作者名:
");
fflush(stdin);
scanf("%s",s->author);
printf("\n请输入图书出版社:
");
fflush(stdin);
scanf("%s",s->publisher);
printf("\n请输入图书出版时间:
");
fflush(stdin);
scanf("%s",s->pbtime);
printf("\n请输入图书分类号:
");
fflush(stdin);
scanf("%s",s->classfy);
printf("\n请输入图书价格:
");
fflush(stdin);
scanf("%f",&s->price);
printf("\n");
p->next=s;/*将新增加的节点添加进链表*/
p=s;/*p指向尾节点,向后移*/
s->next=NULL;
printf("━━━━添加成功!
━━━━");
printf("\n继续添加?
(Y/N):
");
fflush(stdin);
scanf("%c",&flag);
printf("\n");
if(flag=='N'||flag=='n')
{break;}
elseif(flag=='Y'||flag=='y')
{continue;}
}
save(head);/*保存数据至文件*/
return;
}
/*查询操作*/
voidsearch_book(structbooks_list*head)
{
structbooks_list*p;
chartemp[20];
p=head;
if(head==NULL||head->next==NULL)/*判断数据库是否为空*/
{
printf("━━━━图书库为空!
━━━━\n");
}
else
{
printf("请输入您要查找的书名:
");
fflush(stdin);
scanf("%s",temp);
/*指针从头节点开始移动,遍历至尾结点,查找书目信息*/
while(p->next!
=NULL)
{
p=p->next;
if(strcmp(p->bookname,temp)==0)
{
printf("\n图书已找到!
\n");
printf("\n");
printf("登录号:
%s\t\n",p->loginnum);
printf("书名:
%s\t\n",p->bookname);
printf("作者名:
%s\t\n",p->author);
printf("出版单位:
%s\t\n",p->publisher);
printf("出版时间:
%s\t\n",p->pbtime);
printf("分类号:
%s\t\n",p->classfy);
printf("价格:
%.2f\t\n",p->price);
}
if(p->next==NULL)
{
printf("\n查询完毕!
\n");
}
}
}
return;
}
/*浏览操作*/
voidPrint_Book_Doc(structbooks_list*head)
{
structbooks_list*p;
if(head==NULL||head->next==NULL)/*判断数据库是否为空*/
{
printf("\n━━━━没有图书记录!
━━━━\n\n");
return;
}
p=head;
printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n");
printf("┃登录号┃书名┃作者┃出版单位┃出版时间┃分类号┃价格┃\n");
printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");
/*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/
while(p->next!
=NULL)
{
p=p->next;
printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);/*循环输出表格*/
}
printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");
printf("\n");
}
/*修改操作*/
voidinfo_change(structbooks_list*head)
{
structbooks_list*p;
intpanduan=0;/*此变量用于判断是否找到书目*/
chartemp[20];
p=head;
printf("请输入要修改的书名:
");
scanf("%s",temp);
while(p->next!
=NULL)
{
p=p->next;
if(strcmp(p->bookname,temp)==0)
{
printf("\n请输入图书登陆卡号:
");
fflush(stdin);
scanf("%s",p->loginnum);
printf("\n请输入图书书名:
");
fflush(stdin);
scanf("%s",p->bookname);
printf("\n请输入图书作者名:
");
fflush(stdin);
scanf("%s",p->author);
printf("\n请输入图书出版社:
");
fflush(stdin);
scanf("%s",p->publisher);
printf("\n请输入图书出版时间:
");
fflush(stdin);
scanf("%s",p->pbtime);
printf("\n请输入图书分类号:
");
fflush(stdin);
scanf("%s",p->classfy);
printf("\n请输入图书价格:
");
fflush(stdin);
scanf("%f",&p->price);
printf("\n");
panduan=1;
}
}
if(panduan==0)
{
printf("\n━━━━没有图书记录!
━━━━\n\n");
}
return;
}
/*删除操作*/
voidDeleteDoc(structbooks_list*head)
{
structbooks_list*s,*p;/*s为中间变量,p为遍历时使用的指针*/
chartemp[20];
intpanduan;/*此变量用于判断是否找到了书目*/
panduan=0;
p=s=head;
printf("[请输入您要删除的书名]:
");
scanf("%s",temp);
/*遍历到尾结点*/
while(p!
=NULL)
{
if(strcmp(p->bookname,temp)==0)
{
panduan++;
break;
}
p=p->next;
}
if(panduan==1)
{
for(;s->next!
=p;)/*找到所需删除卡号结点的上一个结点*/
{
s=s->next;
}
s->next=p->next;/*将后一节点地址赋值给前一节点的指针域*/
free(p);
printf("\n━━━━删除成功!
━━━━\n");
}
else/*未找到相应书目*/
{
printf("您输入的书目不存在,请确认后输入!
\n");
}
return;
}
intmain(void)
{
structbooks_list*head;
charchoice;
head=NULL;
for(;;)/*实现反复输入选择*/
{
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃┃图书管理系统┃┃\n");
printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf("┃●[1]图书信息录入┃\n");
printf("┃┃\n");
printf("┃●[2]图书信息浏览┃\n");
printf("┃┃\n");
printf("┃●[3]图书信息查询┃\n");
printf("┃┃\n");
printf("┃●[4]图书信息修改┃\n");
printf("┃┃\n");
printf("┃●[5]图书信息删除┃\n");
printf("┃┃\n");
printf("┃●[6]退出系统┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:
");
fflush(stdin);
scanf("%c",&choice);
if(choice=='1')
{
if(head==NULL)
{
head=Create_Books_Doc();
}
InsertDoc(head);
}
elseif(choice=='2')
{
Print_Book_Doc(head);
}
elseif(choice=='3')
{
search_book(head);
}
elseif(choice=='4')
{
info_change(head);
}
elseif(choice=='5')
{
DeleteDoc(head);
}
elseif(choice=='6')
{
printf("\n");
printf("━━━━━━━━感谢使用图书管理系统━━━━━━━━\n");
break;
}
else
{
printf("━━━━输入错误,请重新输入!
━━━━");
break;
}
}
return0;
}