c课程设计开始界面
Ⅰ 用C语言写字符界面的飞机订票系统(课程设计),想在主界面上弄一个好看的界面。怎样弄
直接输出puts("字符串");或者("字符串");
要多行输出时记得加\
例如
printf(" \
\
, \
_/(( \
_.---. .' `\ \
.' ` ^ T= \
/ \ .--' \
| / )'-. \
; , <__..-( '-.) \
\ \-.__) ``--._) \
'.'-.__.-. \
'-...-'?);
右边的\表示换行输出是格式控制符。但是你要控制好每行输出字符个数否则图案每行位置很难对齐
Ⅱ C语言课程设计的界面应该使用哪些函数
以下是graphics.h中的声明,常用的都比较好懂,实在不行就查查MSDN吧,上面有好多名字类似的函数功能都一样.
void far _Cdecl arc(int x, int y, int stangle, int endangle,
int radius);
void far _Cdecl bar(int left, int top, int right, int bottom);
void far _Cdecl bar3d(int left, int top, int right, int bottom,
int depth, int topflag);
void far _Cdecl circle(int x, int y, int radius);
void far _Cdecl cleardevice(void);
void far _Cdecl clearviewport(void);
void far _Cdecl closegraph(void);
void far _Cdecl detectgraph(int far *graphdriver,int far *graphmode);
void far _Cdecl drawpoly(int numpoints, int far *polypoints);
void far _Cdecl ellipse(int x, int y, int stangle, int endangle,
int xradius, int yradius);
void far _Cdecl fillellipse( int x, int y, int xradius, int yradius );
void far _Cdecl fillpoly(int numpoints, int far *polypoints);
void far _Cdecl floodfill(int x, int y, int border);
void far _Cdecl getarccoords(struct arccoordstype far *arccoords);
void far _Cdecl getaspectratio(int far *xasp, int far *yasp);
int far _Cdecl getbkcolor(void);
int far _Cdecl getcolor(void);
struct palettetype * far _Cdecl getdefaultpalette( void );
char * far _Cdecl getdrivername( void );
void far _Cdecl getfillpattern(char far *pattern);
void far _Cdecl getfillsettings(struct fillsettingstype far *fillinfo);
int far _Cdecl getgraphmode(void);
void far _Cdecl getimage(int left, int top, int right, int bottom,
void far *bitmap);
void far _Cdecl getlinesettings(struct linesettingstype far *lineinfo);
int far _Cdecl getmaxcolor(void);
int far _Cdecl getmaxmode(void);
int far _Cdecl getmaxx(void);
int far _Cdecl getmaxy(void);
char * far _Cdecl getmodename( int mode_number );
void far _Cdecl getmoderange(int graphdriver, int far *lomode,
int far *himode);
unsigned far _Cdecl getpixel(int x, int y);
void far _Cdecl getpalette(struct palettetype far *palette);
int far _Cdecl getpalettesize( void );
void far _Cdecl gettextsettings(struct textsettingstype far *texttypeinfo);
void far _Cdecl getviewsettings(struct viewporttype far *viewport);
int far _Cdecl getx(void);
int far _Cdecl gety(void);
void far _Cdecl graphdefaults(void);
char * far _Cdecl grapherrormsg(int errorcode);
void far _Cdecl _graphfreemem(void far *ptr, unsigned size);
void far * far _Cdecl _graphgetmem(unsigned size);
int far _Cdecl graphresult(void);
unsigned far _Cdecl imagesize(int left, int top, int right, int bottom);
void far _Cdecl initgraph(int far *graphdriver,
int far *graphmode,
char far *pathtodriver);
int far _Cdecl installuserdriver( char far *name, int huge (*detect)(void) );
int far _Cdecl installuserfont( char far *name );
void far _Cdecl line(int x1, int y1, int x2, int y2);
void far _Cdecl linerel(int dx, int dy);
void far _Cdecl lineto(int x, int y);
void far _Cdecl moverel(int dx, int dy);
void far _Cdecl moveto(int x, int y);
void far _Cdecl outtext(char far *textstring);
void far _Cdecl outtextxy(int x, int y, char far *textstring);
void far _Cdecl pieslice(int x, int y, int stangle, int endangle,
int radius);
void far _Cdecl putimage(int left, int top, void far *bitmap, int op);
void far _Cdecl putpixel(int x, int y, int color);
void far _Cdecl rectangle(int left, int top, int right, int bottom);
void far _Cdecl restorecrtmode(void);
void far _Cdecl sector( int X, int Y, int StAngle, int EndAngle,
int XRadius, int YRadius );
void far _Cdecl setactivepage(int page);
void far _Cdecl setallpalette(struct palettetype far *palette);
void far _Cdecl setaspectratio( int xasp, int yasp );
void far _Cdecl setbkcolor(int color);
void far _Cdecl setcolor(int color);
void far _Cdecl setfillpattern(char far *upattern, int color);
void far _Cdecl setfillstyle(int pattern, int color);
unsigned far _Cdecl setgraphbufsize(unsigned bufsize);
void far _Cdecl setgraphmode(int mode);
void far _Cdecl setlinestyle(int linestyle, unsigned upattern,
int thickness);
void far _Cdecl setpalette(int colornum, int color);
void far _Cdecl setrgbpalette(int colornum,
int red, int green, int blue);
void far _Cdecl settextjustify(int horiz, int vert);
void far _Cdecl settextstyle(int font, int direction, int charsize);
void far _Cdecl setusercharsize(int multx, int divx,
int multy, int divy);
void far _Cdecl setviewport(int left, int top, int right, int bottom,
int clip);
void far _Cdecl setvisualpage(int page);
void far _Cdecl setwritemode( int mode );
int far _Cdecl textheight(char far *textstring);
int far _Cdecl textwidth(char far *textstring);
/***** graphics drivers *****/
int _Cdecl registerbgidriver(void (*driver)(void));
int far _Cdecl registerfarbgidriver(void far *driver);
/* !! These "functions" are NOT user-callable !! */
/* !! They are there just so you can link in graphics drivers !! */
void _Cdecl CGA_driver(void);
void _Cdecl EGAVGA_driver(void);
void _Cdecl IBM8514_driver(void);
void _Cdecl Herc_driver(void);
void _Cdecl ATT_driver(void);
void _Cdecl PC3270_driver(void);
extern int far _Cdecl CGA_driver_far[];
extern int far _Cdecl EGAVGA_driver_far[];
extern int far _Cdecl IBM8514_driver_far[];
extern int far _Cdecl Herc_driver_far[];
extern int far _Cdecl ATT_driver_far[];
extern int far _Cdecl PC3270_driver_far[];
/***** graphics fonts *****/
int _Cdecl registerbgifont(void (*font)(void));
int far _Cdecl registerfarbgifont(void far *font);
/* !! These "functions" are NOT user-callable, !! */
/* !! they are there just so you can link in fonts !! */
void _Cdecl triplex_font(void);
void _Cdecl small_font(void);
void _Cdecl sansserif_font(void);
void _Cdecl gothic_font(void);
extern int far _Cdecl triplex_font_far[];
extern int far _Cdecl small_font_far[];
extern int far _Cdecl sansserif_font_far[];
extern int far _Cdecl gothic_font_far[];
Ⅲ 高分求作一个c语言编程的操作界面
C语言课程设计报告—班级成绩管理系统
需要分析:
学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。
根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。所以自然的想到要用结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。
. 各函数的功能:
概要设计:
程序的模块组成:
主 函 数: int main()
新建函数:STUDENT *init()
输入函数 :STUDENT *create()
显示函数: void print(STUDENT *head)
删除函数: STUDENT *delete(STUDENT *head)
按名字寻找函数: void lookup(STUDENT *head)
保存函数: void save(STUDENT *head)
按总分排序函数: STUDENT *sort(STUDENT *head)
计算总分和均分函数: void computer(STUDENT *h)
修改函数: STUDENT *Modify(STUDENT *head,STUDENT *new)
按学号排序函数: STUDENT *index(STUDENT *h)
菜单函数:int menu_select()
各个函数的主要功能:
输入函数: 随时输入数据。
菜单函数:显示系统主菜单。
显示函数: 显示所有学生的信息。
寻找函数: 方便学生查找自己的成绩。
删除函数: 删除某学生的信息。
排序函数: 按总成绩排序。
按学号排序函数: 按学号排序。
插入函数: 可以插入新的信息。
保存函数: 保存好学生成绩,以免丢失。
统计函数:
l 显示每门课程成绩最高的学生的基本信息。
l 显示每门课程的平均成绩。
l 显示超过某门课程平均成绩的学生人数。
课题的功能模块的划分:
开始
菜单界面
功能选择
初始化函数
输入学生信息
删除学生信息
显示学生信息
查找学生信息
按成绩排序
保存到文件
从文件读数据
插入学生成绩
分类合计
退出系统
结束
详细设计: 整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:
主函数 main()
利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
菜单选择函数 int menu_select()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,返回菜单。
代码设计: 初始化函数 STUDENT *init()
这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
输入记录函数 STUDENT *create() 这是一个无参函数,用来执行学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个链表头的指针指向一下个学生的信息插在表头。
N-S流程图如下:
head=NULL无条件循环
指针p指向新开辟的单元
指针p是否为空
是 否
输入学号p->num
输出 p->num是否为@
内存 是 否
溢出 输入姓名p->name
停止 for(i=0;i<3;i++)
输入 输入成绩
返回 p->sum=s;
菜单 p->average=(float)s/3;
显示记录函数 void print(STUDENT *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。
N-S流程图如下:
p=head,使指向第一个结点
输出p所指向的结点
p指向一下个结点
当p指的不是表尾
程序调试:
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。最后还是老师帮我帮我们找到了问题的所在——for 循环的次超过了链表中结点的数量。再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。又如:在设计修改学生信息时的密密码时。当用户发现输入密码错误按了退格键后,因为“*”并没有消去。导致用户再次按退格键,又出现前面的情况。最终导致输入密码错误。所以用了两次退格键:
在对链表操作时,要特别链表指针的移动(p=p->next)和链表尾的判断 (p= =NULL)。没有指针的移动,就很容易出现死循环。而在运行过程中不能控制。所以你就会认为是死机。如果没有链表尾的判断。就会在运行过程出现想不到的错误。如:在显示链表信息时,后面就会出现乱码。
一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。
予我耐心解答的老师和同学,是他们为我小程序的成功起到了关键性的作用,那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。
回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
本次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。
但我出总结出了一点点的经验如下:
1、要对系统的功能和要求做出详细的分析,并合理分解任务。
2、把分解出来的子任务,做给一个相对独立的模块。
3、在设计一个模块之前,要简单构想一下总界面的显视情况。
4、针对构想出来的界面进行程序的编写。
最后,感谢老师您对我的指导和从百忙中抽空看我的设计,谢谢!
附件:
源程序:
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
#include "dos.h"
#define N 4 /*定义常数*/
typedef struct z1 /*定义数据结构*/
{
char no[12];
char name[20];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函数原型*/
STUDENT *init(); /*初始化函数*/
STUDENT *create(); /*创建链表*/
STUDENT *delete(STUDENT *h); /*删除记录*/
void print(STUDENT *h); /* 显示所有记录*/
void lookup(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *Modify(STUDENT *h); /*修改记录*/
void append(); /*追加记录*/
STUDENT *sort(STUDENT *h); /*按总分排序*/
STUDENT *index(STUDENT *h); /*按学号排序*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
printf("\n\n\n\n\n\n\n\n\n");
printf(" * * ******* * ***** ***** * * ******* \n");
printf(" * * * * * * * ** * * * \n");
printf(" * * * * ******* * * * * * *** * ******* \n" );
printf(" * * * * * * * * * * * * * \n");
printf(" * * ******* ******* ***** * *** * * * ******* \n");
printf("\n");
printf("\n");
printf("\n");
sleep(2);
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break; /*执行初始化*/
case 1:head=create();break; /*创建链表*/
case 2:print(head);break; /*显示全部记录*/
case 3:head=delete(head);break; /*删除记录*/
case 4:lookup(head);break; /*按名字查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=Modify(head); break; /*修改记录,一般会插在表尾*/
case 9:head=sort(head);break; /*按部分排序*/
case 10:append();break; /*追加记录*/
case 11:head=index(head);break; /*按学号排序*/
case 12: exit(0); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 00. init list", /*初始化*/
" 01. Enter list", /*输入记录*/
" 02. print list ", /*显示单链表中所有记录*/
" 03. Delete a record from list", /*从表中删除记录*/
" 04. Search record on name", /*按照姓名查找记录*/
" 05. Save the file", /*将单链表中记录保存到文件中*/
" 06. Load the file", /*从文件中读入记录*/
" 07. compute the score", /*计算所有学生的总分和均分*/
" 08. Modify an information ", /*修改某学号的信息*/
" 09. sort to make new file", /*排序*/
" 10. append record to file", /*追加记录到文件中*/
" 11. index on nomber", /*按学号排序*/
" 12. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
gotoxy(10,2); /*移动光标*/
putch(0xc9); /*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*输出上边框水平线*/
putch(0xbb); /*输出右上角边框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*输出左垂直线*/
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*输出下边框水平线*/
putch(0xbc); /*输出右下角边框┛*/
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21); /*移动光标*/
do{printf("\n make by wenwei");
printf("\n Enter you choice(0~13):"); /*在菜单窗口外显示提示信息*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c<0||c>14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{ clrscr();
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
clrscr();
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\nout of memory"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号并校验*/
if(info->no[0]=='@') { clrscr();break; } /*如果学号首字符为@则结束输入,清屏后返回*/
inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/
printf("please input %d score \n",N); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次*/
{
do{
printf("score%d:",i+1); /*提示输入第几门课程*/
scanf("%d",&info->score[i]); /*输入成绩*/
if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/
printf("bad data,repeat input\n"); /*出错提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各门课程成绩*/
}
info->sum=s; /*将总分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值为0*/
info->next=h; /*将头结点做为新输入结点的后继结点*/
h=info; /*新输入结点为新的头结点*/
clrscr();
}
return(h); /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*显示提示信息*/
scanf("%s",p); /*输入字符串*/
if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}
/*输出链表中结点信息*/
void print(STUDENT *h)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
clrscr(); /*清屏*/
p=h; /*初值为头指针*/
printf("\n\n\n*********************************STUDENT************************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");
while(p!=NULL) /*只要p不是尾结点,就输出记录*/
{
i++;
printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************************end**************************************\n");
getch(); /*输入任一键返回主菜单*/
clrscr(); /*清屏*/
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[12]; /*存放学号*/
char *pass="wenwei28";
char a[20],b=NULL;
int i=0;
clrscr();
printf("Input your password:");
while((i<20)&&(b!='\r'))
{ b=getch(); /*无回显输入*/
if(b==8)
{ if(i>0)
{a[--i]=NULL;
putchar(8); /*退格键*/
putchar(' '); /*以空格代替*/
putchar(8);
}
else putchar(7); /*没有任何字符的退格,响铃警告*/
}
else if(b!='\r')
{ a[i++]=b; /*只要不是退格和回车就接受*/
putchar('*');
}
else
{a[i]=NULL; break; /*密码输入完了,记得加个NULL到后面*/
}
}
if(strcmp(a,pass)!=0)
{clrscr();
printf("Password is mistake Tow seconds to return!");
sleep(2);clrscr();return h;
}
else {printf("Password is OK! Welcome to come!"); sleep(3);
}
clrscr(); /*清屏*/
printf("please deleted no\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p->next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}
else /*p不为空,显示找到的记录信息*/
{
printf("*********************************have found********************************\n");
printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");
printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[ q=p; /*保存当前结点的指针,作为下一结点的前驱*/
p=p->next; /*指针后移,新读入数据链到当前表尾*/
}
q->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp); /*关闭文件*/
printf("---You have success read data from file!!!---\n");
getch(); /*按任意键返回主菜单*/
clrscr();
return h; /*返回头指针*/
}
/*成绩统计*/
void computer(STUDENT *h)
{
STUDENT *p,*t,*q; /*定义移动指针*/
float saverage[N]={0}; /*均分初值为0*/
int i;
clrscr();
for (i=0;i<N;i++)
{ int n=0,j=0; /*保存记录条数初值为0*/
long s=0; /*总分初值为0*/
p=h; /*从头指针开始*/
while(p!=NULL) /*当p不为空时处理*/
{
s+=p->score[i]; /*累加总分*/
j++; /*统计记录条数*/
p=p->next; /*指针后移*/
h; /*返回头指针
来源: http://..com/question/87150638.html?si=6
Ⅳ C语言课程设计:采用菜单界面 建议使用结构和链表等数据结构 模块化程序设计 2选1,帮帮忙
给你做的是第一个题目,由于水平有限,写的代码有点乱,但是绝对是可以运行的!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_MAX 100//书的名字的最长字数
#define WRITER_MAX 100//作者名字的最长
#define PUB_MAX 100//出版单位最长名字
#define TIME 100//出版时间
typedef struct books
{
int loading;
char name[NAME_MAX];
char writer[WRITER_MAX];
int identify;
char pub[PUB_MAX];
char time[TIME];
int price;
struct books * next;
}book;
//头结点不存储信息
void Init(book * head)
{
head->next=NULL;
}
//打印一些欢迎词之类的。。。。。
void welcome()
{
printf("******欢迎使用章强图书馆,哈哈*********\n");
printf("\n\n");
printf("1:图书信息录入功能\n");
printf("2:图书信息浏览功能,显示该书的所有信息\n");
printf("3:图书信息查询功能:按书名查询与按作者名查询\n");
printf("4:图书信息的修改和删除,可对相应数据进行修改和删除\n");
}
//显示一本书的信息
void print_the_book(book * p1)
{
printf("loading number:%d \n",p1->loading);
printf("name: ");
puts(p1->name);
printf(" \n");
printf("writer: ");
puts(p1->writer);
printf(" \n");
printf("identify:%d \n",p1->identify);
printf(" \n");
printf("pub: ");
puts(p1->pub);
printf(" \n");
printf("time: ");
puts(p1->time);
printf(" \n");
printf("price:%d \n",p1->price);
}
int chongfu(book * head,book * p)
{
book * p1=head->next;
int a=0;
while(p1!=NULL)
{
if(strcmp(p1->name,p->name)==0)
{
if(strcmp(p1->writer,p->writer)==0)
{
a=1;
break;
}
}
else
p1=p1->next;
}
return a;
}
//录入一些信息。。。。
void luru(book * head)
{
book * p1=head;
book * p2;
//寻找NULL前的那个点
while(p1->next!=NULL)
{
p1=p1->next;
}
int a;
do
{
p2=(book *)malloc(sizeof(book));
printf("输入书本信息\n");
printf("登录号\n");
fflush(stdin);
scanf("%d",&p2->loading);
printf("书名\n");
fflush(stdin);
gets(p2->name);
fflush(stdin);
printf("作者\n");
gets(p2->writer);
fflush(stdin);
printf("分类号\n");
scanf("%d",&p2->identify);
fflush(stdin);
printf("出版社\n");
gets(p2->pub);
fflush(stdin);
printf("出版时间\n");
gets(p2->time);
fflush(stdin);
printf("价格\n");
scanf("%d",&p2->price);
p2->next=NULL;
fflush(stdin);
//加入链表
if(chongfu(head,p2))
printf("录入信息重复\n");
else
{
p1->next=p2;
p1=p2;
}
printf("还想继续录入信息吗?\n(1:继续 0:停止)\n");
scanf("%d",&a);
}while(a==1);
}
void liulan(book * head)
{
book * p1=head->next;
int i=1;
while(p1!=NULL)
{
printf("*********第%d本书***********\n",i++);
print_the_book(p1);
p1=p1->next;
}
}
//查询。。。。
void chaxun(book * head)
{
printf("按书名查询还是按作者名查询?\n(1:按书名查询 0:按作者名查询)\n");
book * p=head->next;
int a;
fflush(stdin);
scanf("%d",&a);
int num=0;
char cha[NAME_MAX];
switch(a)
{
case 1:
printf("输入书名:\n");
fflush(stdin);
gets(cha);
while(p!=NULL)
{
if(strcmp(p->name,cha)==0)
{
num++;
print_the_book(p);
}
p=p->next;
}
break;
case 0:
printf("输入作者名:\n");
fflush(stdin);
gets(cha);
while(p!=NULL)
{
if(strcmp(p->writer,cha)==0)
{
num++;
print_the_book(p);
}
p=p->next;
}
}
if(num==0)
printf("无符合书本\n");
}
//修改信息
void xiugai(book * head)
{
printf("输入需要修改书本的名称和作者:\n");
char name_book[NAME_MAX];
char writer_book[WRITER_MAX];
printf("书本名称:");
fflush(stdin);
gets(name_book);
fflush(stdin);
printf("书本作者;\n");
gets(writer_book);
book * p1=head->next;
int a=0;
while(p1!=NULL)
{
if(strcmp(p1->name,name_book)==0)
{
if(strcmp(p1->writer,writer_book)==0)
{
a=1;
break;
}
}
p1=p1->next;
}
if(a==0)
printf("没有这本书。。。\n");
else
{
print_the_book(p1);
printf("输入新信息\n");
fflush(stdin);
printf("登录号\n");
scanf("%d",&p1->loading);
printf("书名\n");
fflush(stdin);
gets(p1->name);
fflush(stdin);
printf("作者\n");
gets(p1->writer);
fflush(stdin);
printf("分类号\n");
scanf("%d",&p1->identify);
fflush(stdin);
printf("出版社\n");
gets(p1->pub);
fflush(stdin);
printf("出版时间\n");
gets(p1->time);
fflush(stdin);
printf("价格\n");
scanf("%d",&p1->price);
p1->next=NULL;
}
}
void main()
{
book * head;
head=(book *)malloc(sizeof(book));
Init(head);
int contin=1;
while(contin)
{
welcome();
printf("想进行哪项操作?\n");
int a;
scanf("%d",&a);
switch(a)
{
case 1:
luru(head);
break;
case 2:
liulan(head);
break;
case 3:
chaxun(head);
break;
case 4:
xiugai(head);
}
printf("继续使用图书馆还是退出?\n(1:continue 0:exit)\n");
scanf("%d",&contin);
}
}
Ⅳ C语言课程设计的欢迎界面 我做了愿程序,现在需要添加欢迎界面 做成我发的图的样式 不会弄 求帮忙
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<windows.h>
#definepi3.14
intcc;
intwelcome0(void)
{
printf(" ");
printf(" ~*************欢迎进入经典算法系统*************~ ");
printf(" ");
printf(" ~*************制作者:小路2013年6月*************~ ");
printf(" ");
printf(" ~*************按任意键进入主菜单*************~");
while(getchar()==0);
system("CLS");
return0;
}
intmain_menu(void)
{
intflag=0;
system("CLS");
printf(" ");
printf(" ~***************************************~ ");
printf(" ");
printf(" 主菜单 ");
printf(" ");
printf(" ~***************************************~ ");
printf(" 1,是长方形 ");
printf(" 2,是正方形 ");
printf(" 3,是三角形 ");
printf(" 4,是圆形 ");
printf(" 0,退出系统 ");
printf(" 请选择输入选项[0/1/2/3/4]:");
scanf("%d",&cc);
while(flag==0)
{
if((cc==0)||(cc==1)||(cc==2)||(cc==3)||(cc==4))
{
flag=1;
}else
{
system("CLS");
printf(" ");
printf(" 1,是长方形 ");
printf(" 2,是正方形 ");
printf(" 3,是三角形 ");
printf(" 4,是圆形 ");
printf(" 0,退出系统 ");
printf(" 请选择输入选项[0/1/2/3/4]:");
fflush(stdin);
scanf("%d",&cc);
}
}
}
floatcfxmj(floata,floatb)
{
floatarea;
area=a*b;
returnarea;
}
floatzfxmj(floata)
{
floatarea;
area=a*a;
returnarea;
}
floatsjxmj(floata,floatb,floatc)
{
floatarea,s;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
returnarea;
}
floatarc(floatr)
{
floats;
s=pi*r*r;
returns;
}
voidmain()
{
floata,b,c,r;
welcome0();
while(1)
{
main_menu();
switch(cc)
{
case1:
fflush(stdin);
printf("输入长方形的长和宽:");
scanf("%f%f",&a,&b);
printf("长方形面积为:%f ",cfxmj(a,b));
break;
case2:
fflush(stdin);
printf("输入正方形的边长:");
scanf("%f",&a);
printf("正方形面积为:%f ",zfxmj(a));
break;
case3:
fflush(stdin);
printf("输入三角形的三条边:");
scanf("%f%f%f",&a,&b,&c);
printf("三角形面积为:%f ",sjxmj(a,b,c));
break;
case4:
fflush(stdin);
printf("输入圆的半径:");
scanf("%f",&r);
printf("圆的面积为:%f ",arc(r));
break;
case0:
return;
break;
}
system("pause");
}
}
Ⅵ 窗口菜单显示 ,C语言课程设计
TurboC 式 窗口菜单 下拉菜单,Alt 激活,ESC返回,有信息框
执行项放入 函数 Act 调用专就行属
tc 2.0, 3.0, wintc 均通过
http://dsa6.fileflyer.com/d/85330220-c91a-45fa-b1aa-bc72c0e770d7/wS0k/4XCYAAv/TMENU.c.rar
Ⅶ C语言课程设计修改 急!!!!
主要是你的菜单嵌套问题,具体需要找。。。我。
例如:
int n;
while(scanf("%d",&n) !=EOF)
{
//菜单显示
//根据n执行对应函数
//在函数中执行相同菜单工作
}
Ⅷ C语言课程设计界面如何制作
界面?? 你问的是课程设计的格式吧?? 要有封皮要有 课程设计的名称 姓名 学好 班级 组别专等等…… 第1页是目录 之后要有课属程设计的题目 问题 算法 流程图 程序代码 实验结果 问题及讨论 参考资料等
Ⅸ c语言课程设计
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
long class_1; //班级
long number; //学号
char name[20]; //姓名
float math; //数学
float c_program; //C语言
float physics; //大学物理
float english; //大学英语
float polity; //政治
float sport; //体育
float summary; //总分
float average; //平均分
}Student;
Student stud[100]; //定义结构体数组变量的大小
int i=0; //i用于记录输入的学生的个数
int menu() //菜单函数
{
int a;
printf("***********************学生信息管理系统*************************\n");
//菜单选择
printf("\t\t【1】输入学生信息\n");
printf("\t\t【2】显示所有学生的信息\n");
printf("\t\t【3】按平均分升降排序\n");
printf("\t\t【4】根据学生的学号查找学生的信息\n");
printf("\t\t【5】插入学生的信息\n");
printf("\t\t【6】删除学生的信息\n");
printf("\t\t【7】修改学生的信息\n");
printf("\t\t【8】从文件中读入数据\n");
printf("\t\t【9】将所有记录写入文件\n");
printf("\t\t【0】退出本系统\n");
printf("***********************学生信息管理系统*************************\n");
printf("请选择你要的操作【0-9】:");
scanf("%d",&a); //读入一个数
while(a<0 || a>9)
{
printf("输入错误!请重新输入。\n");
scanf("%d",&a); //输入错误就一直循环!^_^
}
system("cls"); //清屏
return(a); //返回a的值
}
int input(Student stud[]) //输入学生信息
{
char flag='Y';
while(flag=='y' || flag=='Y') //判断
{
printf("请输入该学生的班别:"); //交互输入学生信息
scanf("%ld",&stud[i].class_1);
printf("请输入该学生的学号:");
scanf("%ld",&stud[i].number);
printf("请输入该学生的姓名:");
scanf("%s",&stud[i].name);
printf("请输入该学生的“数学”分数:");
scanf("%f",&stud[i].math);
printf("请输入该学生的“C程序设计语言”分数:");
scanf("%f",&stud[i].c_program);
printf("请输入该学生的“大学物理”分数:");
scanf("%f",&stud[i].physics);
printf("请输入该学生的“大学英语”分数:");
scanf("%f",&stud[i].english);
printf("请输入该学生的“体育”分数:");
scanf("%f",&stud[i].sport);
printf("请输入该学生的“政治”分数:");
scanf("%f",&stud[i].polity);
getchar(); //用于消除回车键
stud[i].summary=stud[i].math+stud[i].c_program+stud[i]. physics
+stud[i].english+stud[i].sport+stud[i].polity;
stud[i].average=stud[i].summary/6;
printf("该学生的总分为:%6.2f\t平均分为:%6.2f\n",stud[i].summary,stud[i].average);
i++;
printf("继续输入学生信息请按:Y or y,退出请按:N or n.\n");
scanf("%c",&flag); //判断是否继续输入
}
printf("按任意键回主菜单\n");
getchar();
system("cls");
return(i);
}
void Display(Student stud[],int n) //显示所有记录
{
int k;
if(n==0)
printf("暂无学生记录!\n");
else
{
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n");
for(k=0;k<n;k++) //循环输出
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
}
}
system("pause");
system("cls");
}
void Sort(Student stud[],int i) //按平均分排序
{
int m,n,k; //m,n为循环变量
Student t;
for(m=0;m<i-1;m++) //排序
for(n=m+1;n<i;n++)
if(stud[m].average<stud[n].average)
{
t=stud[m];
stud[m]=stud[n];
stud[n]=t;
}
printf("排序后的顺序为:\n");
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n");
for(k=0;k<i;k++) //循环输出
{
printf("%7ld",stud[k].class_1);
printf("%7d",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
}
system("pause");
system("cls");
}
void Search(Student stud[],int i) //查找并显示一个记录
{
int p,k; //p为要查找的学生学号,t为循环节,s用来判断循环是否结束
char flag='y';
while(flag=='y' || flag=='Y')
{
printf("请输入要查找的学生学号:");
scanf("%d",&p);
getchar();
for(k=0;p!=stud[k].number && k<i;k++);
if(k==i)printf("该学号不存在!\n");
else {
printf("该学生的信息为:\n");
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
}
printf("继续查找学生信息请输入:Y or y,退出输入:N or n\n");
scanf("%c",&flag); //判断是否继续输入
}
system("cls");
}
int Insert(Student stud[],int i) //插入学生的信息
{
char flag='Y';
while(flag=='y' || flag=='Y')
{
printf("请输入要插入学生的班别:"); //交互输入学生信息
scanf("%ld",&stud[i].class_1);
printf("请输入要插入学生的学号:");
scanf("%ld",&stud[i].number);
printf("请输入要插入学生的姓名:");
scanf("%s",&stud[i].name);
printf("请输入要插入学生的“数学”分数:");
scanf("%f",&stud[i].math);
printf("请输入要插入学生的“C程序设计语言”分数:");
scanf("%f",&stud[i].c_program);
printf("请输入要插入学生的“大学物理”分数:");
scanf("%f",&stud[i].physics);
printf("请输入要插入学生的“大学英语”分数:");
scanf("%f",&stud[i].english);
printf("请输入要插入学生的“体育”分数:");
scanf("%f",&stud[i].sport);
printf("请输入要插入学生的“政治”分数:");
scanf("%f",&stud[i].polity);
getchar();
stud[i].summary=stud[i].math+stud[i].c_program+stud[i]. physics
+stud[i].english+stud[i].sport+stud[i].polity;
stud[i].average=stud[i].summary/6;
printf("该学生的总分为:%6.2f\n",stud[i].summary);
printf("该学生的平均分为:%6.2f\n",stud[i].average);
i++;
printf("继续输入学生信息请输入:Y or y,退出输入:N or n\n");
scanf("%c",&flag); //判断是否继续输入
}
getchar();
printf("是否需要排序,需要请按‘Y’或‘y’;不需要请按‘N’或‘n’.\n");
flag=getchar();
if(flag=='y' || flag=='Y')Sort(stud,i);
system("cls");
return(i);
}
int Delete(Student stud[],int i) //根据输入的学号删除学生的信息
{
long s;
int t,p;
char a='Y'; //判断循环是否继续
while(a=='y' || a=='Y')
{
printf("请输入需要删除学生的学号:\n"); //采用交互式删除
scanf("%ld",&s);
getchar(); //消除回车键的影响
for(t=0;t<i && s!=stud[t].number;t++);
if(s==stud[t].number)
{
for(p=t;p<i;p++)
stud[p]=stud[p+1];
i=i-1;
printf("删除成功!\n");
}
else printf("没有找到要删除的学号!\n");
printf("是否继续删除,继续请按'Y'或'y',退出请按'N'或'n'.\n");
a=getchar(); //判断是否继续
getchar(); //消除回车键的影响
}
system("cls");
return(i);
}
void change(Student stud[],int i) //修改学生的信息
{
long p=0; //p用来表示要删除的学生的学号
int k; //k为循环变量
char a='y';
while(a=='y' || a=='Y')
{
printf("\t\t学生信息修改:\n");
printf("请输入要修改的学生的学号:\n");
scanf("%ld",&p);
for(k=0;p!=stud[k].number && k<i;k++);
if(k==i)printf("无法找到该学生的信息\n");
else {
printf("该学生的信息为:\n");
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
printf("请输入该学生的新信息:\n");
printf("请输入该学生的班级:"); //交互输入学生信息
scanf("%d",&stud[k].class_1);
printf("请输入该学生的学号:");
scanf("%d",&stud[k].number);
printf("请输入该学生的姓名:");
scanf("%s",&stud[k].name);
printf("请输入该学生的“数学”分数:");
scanf("%f",&stud[k].math);
printf("请输入该学生的“C程序设计语言”分数:");
scanf("%f",&stud[k].c_program);
printf("请输入该学生的“大学物理”分数:");
scanf("%f",&stud[k].physics);
printf("请输入该学生的“大学英语”分数:");
scanf("%f",&stud[k].english);
printf("请输入该学生的“体育”分数:");
scanf("%f",&stud[k].sport);
printf("请输入该学生的“政治”分数:");
scanf("%f",&stud[k].polity);
getchar();
stud[k].summary=stud[k].math+stud[k].c_program+stud[k]. physics
+stud[k].english+stud[k].sport+stud[k].polity;
stud[k].average=stud[k].summary/6;
printf("修改成功!\n");
}
printf("是否继续修改,继续请按'Y'或'y',退出请按'N'或'n'.\n");
a=getchar(); //判断是否继续
}
system("pause");
system("cls");
}
int Read(Student stud[],int i) //从文件中读入学生信息
{
int k=i;
FILE *fp; //定义一个文件类型的指针
char filename[20]; //定义文件名
printf("请输入文件名:\n");
scanf("%s",&filename); //输入文件名
if((fp=fopen(filename,"rb"))==NULL) //打开文件
{
printf("无法打开该文件!\n"); //打开失败信息
return 0;
}
printf("从文件%s中读入的数据为:\n",filename);
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n");
while(!feof(fp))
{
fread(&stud[k],sizeof(Student),1,fp);
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
k++;
}
fclose(fp);
printf("读入成功,\n");
system("pause");
system("cls");
return(k);
}
void Save(Student stud[],int i) //将所有记录写入文件
{
int k=0;
FILE *fp; //定义文件指针
char filename[20]; //定义文件名
printf("请输入你要存储学生信息的文件名:"); //输入文件名
scanf("%s",&filename);
if((fp=fopen(filename,"wb"))==NULL) //打开文件
{
printf("无法打开该文件!\n"); //打开失败信息
return;
}
printf("保存到文件%s里的信息为:\n",filename);
while(k<i)
{
fwrite(&stud[k],sizeof(Student),1,fp);
printf("%7ld",stud[k].class_1);
printf("%7d",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
k++;
}
fclose(fp);
printf("信息保存成功,");
system("pause");
system("cls");
}
int main() //主函数
{
int n=0;
while(1)
{
switch(menu()) //选择判断要执行的语句
{
case 1:
printf("\n*******输入学生信息*******\n");
//输入学生信息
n=input(stud);break;
case 2:
printf("\n*******显示所有学生的信息*******\n");
//显示所有学生的信息
Display(stud,n);break;
case 3:
printf("\n*******按平均分升降排序*******\n");
//给学生成绩排序
Sort(stud,n);break;
case 4:
printf("\n*******根据学生的学号查找学生的信息*******\n");
//根据输入的学号查找学生的信息
Search(stud,n);break;
case 5:
printf("\n*******插入学生的信息*******\n");
//插入学生的信息
n=Insert(stud,n);break;
case 6:
printf("\n*******删除学生的信息*******\n");
//删除学生的信息
n=Delete(stud,n);break;
case 7:
printf("\n*******修改学生的信息*******\n");
//修改学生的信息
change(stud,n);break;
case 8:
printf("\n*******从文件中读入数据*******\n");
//从文件中读入数据
n=Read(stud,n);break;
case 9:
printf("\n*******将所有记录写入文件*******\n");
//将所有记录写入文件
Save(stud,n);break;
case 0:
printf("\n*******感谢您的使用*******\n");
//结束程序
exit(0);
}
}
return 0;
}