当前位置:首页 » 课程大全 » unix课程设计c语言

unix课程设计c语言

发布时间: 2021-02-24 09:26:13

㈠ unix系统与c语言有什么关系

1 目前的unix的源码,绝大多数都是由C语言编写的。剩余很小一部分为汇编语言。
2 最早内的unix是由B语言(由BCPL演化容而成)编写的,但是由于不够高效及功能不够完善,为编写更好的unix系统,为此将B语言再次优化,从而形成了C语言。所以,C语言是因为unix系统而诞生的。即先有unix, 再出现C语言,然后C语言又实现了更强大的unix系统。
3 unix与C语言相辅相成,共为一体。unix系统及其演变出的类unix系统,搭配的编译器是对C语言规范支持及执行的最好的。

㈡ C语言程序设计 (学生选修课程设计)

这是我做的,你看是否满意?可能有点大,但也没办法呀,你的题目也比较大,呵呵!所以,如果满意,多给我追加点分!
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct course
{
char number[15],name[25];
int kind,time,lessontime,practicetime,credit,term;
}type;
FILE *fp1;
void overview(); //浏览函数,负责浏览整个课程信息
void seek(); //查询函数,负责查询课程信息
void choose_course();//选课函数,负责让用户选课
void out(type temp);
void input();
int main()
{
int n,i;
if((fp1=fopen("course_information.txt","wb"))==NULL)
{printf("创建文件失败!\n");exit(0);}
printf("请输入要存储的课程数目:\n");
scanf("%d",&n);
printf("开始创建文件,请输入课程信息:\n\n");
for(i=0;i<n;i++)
{
printf("请输入第%d门课程的信息:\n",i+1);
input();
printf("\n");
}
printf("如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2; 如想进行选课,请输入3;如想结束选修课系统,请输入0!\n");
while((scanf("%d",&n))!=EOF)
{
if(n==1)
overview();
if(n==2)
seek();
if(n==3)
choose_course();
if(n==0)
exit(0);
printf("\n\n如想继续操作,只要按规则输入你要进行的操作即可!\n规则:如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2;如想进行选课,请输入3!\n");
}
printf("欢迎您使用此程序进行选课,谢谢!\n");
fclose(fp1);
return 0;
}
void input()
{
course c_a;
printf("请输入课程编码: ");
scanf("%s",c_a.number);
printf("请输入课程名: ");
scanf("%s",c_a.name);
printf("请输入课程性质:限选课,请输入1;选修课,请输入2;必修课,请输入3! ");
scanf("%d",&c_a.name);
printf("请输入课程总学时: ");
scanf("%d",&c_a.time);
printf("请输入课程授课时间: ");
scanf("%d",&c_a.lessontime);
printf("请输入课程实验或实践时间: ");
scanf("%d",&c_a.practicetime);
printf("请输入课程学分: ");
scanf("%d",&c_a.credit);
printf("请输入课程所在的学期,比如第二学期,就输入2即可。");
scanf("%d",&c_a.term);
fwrite(&c_a,sizeof(struct course),1,fp1);//将一个结构体元素写入文件中
}
void out(type temp)
{
printf("课程代码: %s\n课程名: %s\n",temp.number,temp.name);
printf("课程名: %s\n",temp.name);
if(temp.kind==1)
printf("课程性质: Limited optional course\n");
else if(temp.kind==2)
printf("课程性质: Optional course\n");
else if(temp.kind==3)
printf("课程性质: Required Courses\n");
else
printf("该编码系统不认识,即无对应的课程性质存在!\n");
printf("课程总学时: %d\n课程授课学时: %d\n实验或上机学时: %d\n学分: %d\n课程开课学期: %d\n\n",temp.time,temp.lessontime,temp.practicetime,temp.credit,temp.term);
}
void overview()
{
rewind(fp1);
course temp;
printf("整个课程信息如下:\n");
while((fread(&temp,sizeof(type),1,fp1))!=0)
out(temp);
}
void seek()
{
int judge,credit=0,kind=0;
char a='N';
course temp;
printf("如想按学分查询,请输入1;如想按课程性质,请输入2:\n");
scanf("%d",&judge);
rewind(fp1); //将文件指针位置置为开头
if(judge==1)
{
printf("请输入要查询的学分:\n");
scanf("%d",&credit);
while((fread(&temp,sizeof(type),1,fp1))!=0)
if(credit==temp.credit)
out(temp);
}
else if(judge==2)
{
printf("请输入你要查找课程的性质(限选课,请输入1;选修课,请输入2;必修课,请输入3):");
scanf("%d",&kind);
while((fread(&temp,sizeof(type),1,fp1))!=0)
if(temp.kind==kind)
out(temp);
}
else
printf("不好意思,无此类查询!\n");
}
void choose_course()
{
rewind(fp1);
course temp;
int judge=1,n=0,time=0,credit=0;
char choose[20][20];
r1: printf("请开始填写课程编号进行选课:\n");
while(judge==1)
{
printf("请输入你所选课程的标号: ");
scanf("%s",choose[n]);
n++;
printf("如想继续选课,请输入1;如想提交,请输入0!\n");
scanf("%d",&judge);
}
while((fread(&temp,sizeof(type),1,fp1))!=0)
{
for(int i=0;i<n;i++)
if(strcmp(temp.number,choose[i])==0)
{time=time+temp.time;credit=temp.credit;break;}
}
if(time<270||credit<40)
goto r1;
printf("你所选的课为:\n");
while((fread(&temp,sizeof(type),1,fp1))!=0)
{
for(int i=0;i<n;i++)
if(strcmp(temp.number,choose[i])==0)
{out(temp);break;}
}
}

㈢ UNIX程序设计

第一步:在vi中书写程序father2.c,代码如下内:容

#include<stdio.h>

#include<time.h>

#include<sys/types.h>

void show_systime(void);

main()

{

pid_t pid;

int i;

pid=fork();

if(pid<0)

{

perror("filed ehwn creating new process\n");

exit(1);

}

else

if(pid==0)

{show_systime();<br/><br/>}

else

{wait(NULL);<br/><br/>for(i=1;i<=100;i++)<br/><br/>{printf("%d",i);<br/><br/>printf("\n");}

}

}

void show_systime(void)

{

time_t t;

if(time(&t)==((time_t)-1))

{printf("Error when getting time!\n");<br/><br/>exit(1);}

else{

char *tt;

tt=ctime(&t);

printf("now is %s\n",tt);}

}

㈣ c语言课程设计!急!!!

#include<stdio.h>
#include<stdlib.h>//应用动态存储分配函数//
#include<time.h>
# define LEN sizeof(struct question)
struct question
{
char ask[200];//选择题题目//
char answer[4][80];//选择题选项,每个答案的长度//
int right;//正确答案//
struct question *next;//next是指针类型的成员,
//它指向struct question类型数据(即next所在的结构体类型)
//使用指针类型成员存放下一个结点的地址
//此步骤实现了问题的连续输入输入
};
int menu(void);//声明菜单选择函数
struct question *seek(struct question *seek,long len,long max);//寻找读取答案的位置
struct question *insert(struct question *fst,const struct question *ad);//插入试题
void getquestion(struct question *s);//获取问题,选项,以及正确答案
void savefile(const struct question *a,FILE *sf);//保存最佳答案在文件中//
struct question *loadfile(struct question *b,FILE *lf);//读取题目,将题目添加到列表中
int getanswer(void);//得到答案
int getyouranswer(void);//得到考生答案
void explainquestion(const struct question *q,int n);//统计答对题目数,显示得分
//选择菜单//
int menu(void)
{
int v;
printf("1—添加选择题\n2—回答选择题\n3—退出\n");
scanf("%d",&v);
return v;
}
//seek函数确定一个读取答案的位置,len代表要读取的答案数,max代表列表的长度//
struct question *seek(struct question *seek,long len,long max)
{
int i;
srand(time(NULL));
while(i=rand()%max+len<max);//随机选取一个读题目的位置//
while(i--)
seek=seek->next;//找到指定的位置//
return seek;
}
//向列表中插入试题//
struct question *insert(struct question *fst,const struct question *ad)
{
struct question *newptr=(struct question *)malloc(LEN);//分配新的内存空间//
if (newptr==NULL)
exit(0);
*newptr=*ad;
newptr->next=fst;
return newptr;
}
//获取问题,选项,以及正确答案//
void getquestion(struct question *s)
{
int i=0;
printf("请输入选择题题目:\n");
scanf("%s",s->ask);//指向结构体中的成员//
while(i<4)
{
printf("请输入选项%c的答案:\n",i+'A');
scanf("%s",s->answer[i++]);
}
s->right=getanswer();
}
//试题保存//
void savefile(const struct question *a,FILE *sf)//使用const说明成员函数//
{
fclose(sf);
if((sf=fopen("kstm.dat","w"))==NULL)//以写的方式重新打开文件//
return;
while(a)
{
fwrite(a,sizeof(struct question),1,sf);
a=a->next;
}
}
//从文件中读取题目,将题目添加到列表中//
struct question *loadfile(struct question *b,FILE *lf)
{
struct question temp;
while (fread(&temp,sizeof(struct question),1,lf))
b=insert(b,&temp);
return b;
}

//统计答对题目数,显示得分//
void explainquestion(const struct question *que,int n)
{
int i=0,t=0;
char result[1001],*p=result;
for(i=0;t<n;que=que->next,t++)
{
printf("%s\nA.%s\nB.%s\nC.%s\nD.%s\n\n",que->ask,que->answer[0],que->answer[1],que->answer[2],que->answer[3]);
if((*p=que->right)==(*(p+1)=getyouranswer()))
++i;
p+=2;
}
*p='\0';
printf("\n%-20s%-20s%s\n","标准答案","你的答案","评价");
for(p=result;*p!='\0';p+=2)
printf("%-20c%-20c%s\n",*p,*(p+1),*p==*(p+1)?"正确":"错误");
printf("\n你回答了%d道题,答对%d道题目,得分:%.2f\n\n",n,i,(float)(i*100.00/n));
}
//得到选择题的答案//
int getanswer(void)
{
static int i=1;
int c=0;//必须进行初始化,避免出现偶然性的错误//
while(c<'A'||c>'D')//确保输入的答案是ABCD中的一个//
{
printf("请输第%d题的正确答案:",i);
scanf("%c",&c);
printf("\n");
if(c>96)
c=c-32;//实现小写向大写的转换//
}i++;
return c;
}
int getyouranswer(void)
{
int c=0;//必须进行初始化,避免出现偶然性的错误//
while(c<'A'||c>'D')//确保输入的答案是ABCD中的一个//
{
printf("请输入你的答案:");
scanf("%c",&c);
if(c>96)
c=c-32;//实现小写向大写的转换//
}
return c;
}
main()
{
struct question *start=NULL,temp;
long int choice,line=0,c;
FILE *fp=fopen("kstm.dat","a+");//用'a+'方式打开文件名为'kstm.dat'文件,可添可读//
start=loadfile(start,fp);
printf(" *****欢迎使用此考试系统,请输入你要执行的步骤的编号*****\n");
while((choice=menu())!=3)//如果考生不选3-退出//
if(choice==1)
{
getquestion(&temp);
start=insert(start,&temp);
++line;//统计列表的长度//
}
else if(choice==2)
{
printf("请输入要回答的问题数量:");
scanf("%d",&c);
start=seek(start,c,line);
explainquestion(start,c);
}
savefile(start,fp);
fclose(fp);
return 0;
}

㈤ unix/linux c语言编程

1、这个函数把第一个参数mesg打印到stdout文件中去,stdout一般对应于显示器,准确回的名字叫标准输答出
2、stdout是文件描述符,不用你自己来定义,已经由stdio.h定义了,一般为#define stdout 0
望采纳,谢谢。

㈥ 在unix上用什么编译c语言写的程序

这个很简单,看复来老制兄是linux高手,基本上不会使用win系统,如果你有源代码的情况下,在windows系统下,双击vc++软件后,新建工程,然后选择Win32 Console Application,然后再右边应该有保存的硬盘路径和输入工程名,然后根据提示下一步,直道完成,然后再点击左边的file view 然后在在你要加入的文件夹内新建文件然后保存成.c的后缀名,就可以把你的源代码写进去了,然后找到一个叹号,点击它,就编译运行了,运行时弹出一个dos窗口,就可以看到了。c++完全兼容c语言,vc的编译环境,可以有api,也就是说编写窗口程序。比起linux来,就是可以直接在点一个按钮就行了,省的写那些命令了。其他的应该不会有太大区别。 点红色的叹号是运行,vc把编译,连接,执行,都分开了,如果点了红色的叹号也运行不了,那就说明你vc软件本身有问题。建议你重新下载一个再试试。

㈦ c语言课程设计实例

#include<iostream.h>
void main()
{
char a[12][9]={{'j','a','n','u','a','r','y'},{'F','e','b','r','u','a','r','y'},{'m','a','r','c','h'},{'a','p','r','i','l'},{'m','a','y'},{'j','u','n','e'},{'j','u','l','y'},{'a','u','g','u','s','t'}, {'s','e','p','t','e','m','b','e','r'},{'o','c','t','o','b','e','r'},{'n','o','v','e','m','b','e','r'},{'D','e','c','e','m','b','e','r'}},(*p)[9]=a;
int b;
cout<<"输入月份:";
cin>>b;
cout<<"该月的英文单词是:"<<*(p+b-1)<<endl;
}

程序写到这分上,我都想自杀了.......用字符串应该会简单些,可是我没想好..只能这样了..

㈧ C语言(unix)

/* triangle.c */
//---------------------------------------------------------------------------

#include <stdio.h>
int can(int,int,int);
void equilateral(int,int,int);
void isosceles(int,int,int);
void RightAngled(int,int,int);

int main(int argc, char* argv[])
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%s\n%s\n%s\n%s\n\n",
"Can a triangle can be formed with the given lengths?",
"Is the triangle equilateral?" ,
"If the triangle is not equilateral, it is isosceles?",
"Is the triangle right-angled?");

if (can(a,b,c))puts("Yes");
else puts("No");
equilateral(a,b,c);
isosceles(a,b,c);
RightAngled(a,b,c);

return 0;
}
int can(int a,int b,int c)
{
if (a+b>c&&a-b<c)
return 1;
return 0;
}

void equilateral(int a,int b,int c)
{
if (can(a,b,c))
if (a==b&&a==c) puts("Yes");
else puts("No");
else puts("Not applicable");
}

void isosceles(int a,int b,int c)
{
if (can(a,b,c))
if (a==b||==c||b==c) puts("Yes");
else puts("No");
else puts("Not applicable");
}

void RightAngled(int a,int b,int c)
{
if (can(a,b,c))
if (a*a+b*b==c*c||a*a+c*c==b*b||a*a==b*b+c*c)
puts("Yes");
else puts("No");
else puts("Not applicable");
}
//---------------------------------------------------------------------------

/*collinear.c*/
//---------------------------------------------------------------------------

#include <stdio.h>
#include <math.h>
#define eps 1e-10
int main(int argc, char* argv[])
{
double x1,x2,x3,y1,y2,y3;
puts("Input x1&y1:");
scanf("%lf%lf",&x1,&y1);
puts("Input x2&y2:");
scanf("%lf%lf",&x2,&y2);
puts("Input x3&y3:");
scanf("%lf%lf",&x3,&y3);
if (fabs(x1-x2)<eps&&fabs(y1-y2)<eps) {
puts("\nERROR:the same points");
}
else if(fabs(x1-x2)<eps&&fabs(x1-x3)<eps||fabs(y1-y2)<eps&&fabs(y1-y3)<eps)
{
puts("\nCollinear!");
}
else if((x3-x1)/(x2-x1)-(y3-y1)/(y2-y1)<eps)
{
puts("\nCollinear!");
}
else puts("\nNot Collinear!");

return 0;
}
//---------------------------------------------------------------------------

/*number-words.c*/
//---------------------------------------------------------------------------

#include <stdio.h>

int main(int argc, char* argv[])
{
char *s[]={"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
char
*g[]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
int i;
do
{
printf("Input i:\t");
scanf("%d",&i);
if (i>99||i<-99)
puts("ERROR: -100<i<100");
}while(i>99||i<-99);
putchar('\n');
if (i>=0&&i<20) {
puts(g[i]);
}
else if (i<0&&i>-20) {
printf("negative %s\n",g[i*-1]);
}
else if (i%10==0) {
i>0?printf("%s\n",s[i/10-2]):printf("negative %s\n",s[(-1*i)/10-2]);
}
else if (i>0) {
printf("%s-%s\n",s[i/10-2],g[i%10]);
}
else if (i<0) {
printf("negative %s-%s\n",s[-1*i/10-2],g[-1*i%10]);
}

return 0;
}
//---------------------------------------------------------------------------

以上程序均在SOLARIS5+GCC中测试通过,如果有其它问题,请留言。

㈨ 求一个C语言课程设计

第一部分、课程设计的题目与要求
1、 问题的提出
小型图书借阅管理系统的设计。
实现查询和显示功能,可办理借书和还书手续,同时可查询学生所借图书的信息。
2、 功能要求
实现查询和显示功能:按书名查询、按作者名查询和显示图书库存信息。将满足查询条件的整条记录显示在屏幕上。
办理借阅手续:输入学生号,如果不存在于第二个文本文件中,则不能办理借阅,否则,继续输入要借阅的书名,如果在图书信息中存在该书,且未被借出,则可以办理借阅手续,并修改该书的存在状态标志,登记借阅人学号和学生的借阅本数,并修改相应的文本文件。
办理还书手续:输入学生学号,判断其是否有借书。如有借书,则输入书名,判断该书是否被借出,将图书的存在状态标记为1,还书成功,并修改学生的借阅本数。同时修改相应的文本文件。
查询学生所借图书的信息。数据显示效果如下:
学号 2008002 姓名 李四 专业 英语
图书编号 书名 作者 单价
bk001 C语言 谭浩强 35.00
bk009 数据结构 严蔚敏 22.00

第二部分、课程设计题目功能
1、 系统功能模块框图设计

2、数据结构说明
struct books //定义图书信息结构体
{char bknu[10]; //结构体成员,图书编号
char bkname[30]; //结构体成员,图书名
char bkauthor[10]; //结构体成员,图书作者
float price; //结构体成员,图书单价
int flag; //结构体成员,图书存在状态
char readnu[10]; //结构体成员,图书借阅人学号
}bk[M]; //定义结构体数组

struct students //定义学生信息结构体
{char stunum[10]; //结构体成员,学生学号
char stuname[30]; //结构体成员,学生姓名
char spe[16]; //结构体成员,学生专业
int borrow; //结构体成员,学生借阅本数
}stu[N]; //定义结构体数组

char str1[81],str2[81];//定义二个字符数组,用来存储二个文本的表头信息

void read1()
{
FILE *fp; //定义一个文件指针变量,指向图书文本
……
}
void read1()
{
FILE *fp; //定义一个文件指针变量,指向学生文本
……
}
void find_author()
{
char author[10]; //定义一个字符数组,用来存放键入的作者名
……
}
void find_bkname()
{
char bkname[10]; //定义一个字符数组,用来存放键入的图书名
……
}
void booklend()
{
FILE *fp1,*fp2; //定义二个文件指针变量,分别指向图书文本和学生文本
char stunumber[10],bkname[30]; //定义二个字符数组,分别用来存放键入的学生学号和书名
……
}

2、 详细设计

程序开始运行后先执行函数main(),函数void read1()从图书文本中读出数据保存到结构体数组bk[M]中,同时输出在屏幕上,通过调用函数read2()从stu文本中读出数据保存到结构体数组stu[N],同时输出在屏幕上。通过while循环与switch(i)语句来实现功能的选择。通过键入i来调用函数:
当i=1时,调用函数void find_author();
当i=2时,调用函数void find_bkname();
当i=3时,调用函数void find_others();
当i=4时,调用函数void booklend();
当i=5时,调用函数void bookreturn();
当i=6时,调用函数void find_stu();
函数void read1()从bk文本中读出数据保存到结构体数组bk[M]中,同时读取的信息输出在屏幕上。

函数void read2()从stu文本中读出数据保存到结构体数组stu[N],同时读取的信息输出在屏幕上。

函数void find_author(),该函数返回值为空,作用是从结构体数组bk[M]中查找满足条件(输入的作者名与结构体成员—作者名相同),将满足条件的bk[i],输出到屏幕上。具体,键入一作者名,与结构体成员author比较,若相同则输出到屏幕。

函数void find_bkname(),该函数返回值为空,作用是从结构体数组bk[M]中查找满足条件(输入的书名与结构体成员—书名相同),将满足条件的bk[i],输出到屏幕上。具体,键入一书名,与结构体成员bkname比较,若相同则输出到屏幕。

函数void find_others(),该函数的返回值为空,作用是从结构体数组bk[M]中查找满足条件(结构体成员—存在状态为零),将满足条件的bk[i],输出到屏幕上。具体,通过if语言判断结构体成员flag,若值为1,则输出到屏幕。

函数void booklend(),该函数返回值为空,作用是借书。具体,键入一个学号,判断该学号是否在学生文本中,若存在,键入一个书名判断该书是否在图书文本中且是否在库,如果也满足条件则办理借书手续,同时修改后的信息写入文本中。

具体流程图如下图:
函数void bookreturn(),该函数返回值为空,作用是还书。具体,键入一个学号,判断该学号是否在学生文本中,若存在,键入一个书名判断该书是否在图书文本中且是否在库,如果也满足条件则办理还书手续,同时修改后的信息写入文本中。
具体流程图如下图:

函数void find_stu(),该函数返回值为空,作用时查询学生借阅图书的信息。具体,键入一个学号,通过循环与结构体数组bk[i].readnu比较,若相同则输出。
3、 调试与测试

原始数据文件:

图书编号 书名 作者 单价 存在状态 借阅人学号
bk001 C语言 谭浩强 35.00 1 无
bk002 寻觅中华 余秋雨 40.00 1 无
bk003 C语言 谭浩强 35.00 1 无
bk004 C++程序设计 谭浩强 36.00 1 无
bk005 文化苦旅 余秋雨 22.00 1 无
bk006 牛津简明英语词典 Thompson 119.00 1 无
bk007 Oracle基础教程 佩里 65.00 1 无
bk008 C语言 李春葆 39.00 1 无
bk009 数据结构 严蔚敏 22.00 1 无
bk010 大学化学 何培之 30.00 1 无
bk011 C语言程序设计 杜友福 28.00 1 无
bk012 大学英语 郑数昙 23.90 1 无
bk013 高等数学 刘修生 12.00 1 无
bk014 电路与模拟电子技术 高玉良 25.50 1 无
bk015 大学英语语法 张道真 29.00 1 无

学号 姓名 专业 借阅本数
2008001 张三 计算机 0
2008002 李四 英语 0
2008003 赵晓云 计算机 0
2008004 Mary 机械 0
2008005 王楠 电信 0
2008006 周诗维 计算机 0
2008007 张腾 石油 0
2008008 李俊杰 石油 0
2008009 刘杰 机械 0
2008010 王飞 城建 0

测试功能1(按作者名查询):效果如下图
查找作者为谭浩强的图书

测试功能2(按书名查询):效果如下图
查找图书名为电路与模拟电子技术的图书

测试功能3(输出库存图书信息):效果如下图

测试功能4(借书):效果如下图
学号为2008009的学生需要借阅电路与模拟电子技术

测试功能6(显示学生所借图书信息):如图所示
显示学号为2008009的学生所借图书信息

测试功能5(还书):效果如下图
学号为2008009的学生需要还电路与模拟电子技术

执行功能2时,提示内存错误。原因是子函数find_bkname()中定义的字符数组bkname[10]长度不够,改成bkname[30]即可。
执行功能5后,借阅本书都变成地址值。原因是在子函数bookreturn()中输出语句printf()中的‘输出项表列中stu[i].borrow’前加了取地址运算符,去掉该地址运算符即可。
执行功能4后,图书文本中所有数据全都填到了一列上。原因是在子函数book_lend()的fprintf()中格式控制字符串后少了换行。
在程序运行过程中,还出现以下需要注意的错误:if语句条件表达式中应使用逻辑等于(==);可能漏写分号;写程序时应注意输入法切换,正确输入字符。

第三部分、课程设计总结
在本次实训中,我有很多收获。自己对课本知识上的小的知识点把握不够,在这次实训中很多错误都是一些小问题,只要写程序的时候注意点就可以避免,以后写程序时一定会注意。遇到了困难,首先自己找,实在不能解决的话就请教老师和同学。其实很多问题都是我们自己可以解决的,只要我们用心去找,同时相信自己能解决问题。我在这次实训中学会了调试程序,这个功能是我以前所不知道。
对于这个系统,因为它的简单,所以存在不足之处,我就一个方面谈谈我的设想。通过在函数中加条件语句,限制每个人的借书本书,所借图书的总金额。

附录 程序清单
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 15
#define N 10

struct books //定义图书信息结构体
{char bknu[10]; //结构体成员,图书编号
char bkname[30]; //结构体成员,图书名
char bkauthor[10]; //结构体成员,图书作者
float price; //结构体成员,图书单价
int flag; //结构体成员,图书存在状态
char readnu[10]; //结构体成员,图书借阅人学号
}bk[M]; //定义结构体数组

struct students //定义学生信息结构体
{char stunum[10]; //结构体成员,学生学号
char stuname[30]; //结构体成员,学生姓名
char spe[16]; //结构体成员,学生专业
int borrow; //结构体成员,学生借阅本数
}stu[N]; //定义结构体数组

char str1[81],str2[81];//定义二个字符数组,用来存储二个文本的表头信息

//读出图书信息
void read1()
{
FILE *fp;
int i;
if((fp=fopen("D:\\jz80243_bk.txt","r"))==NULL)
{printf("can not open file");
exit(0);
}

fgets(str1,81,fp);
puts(str1);

for(i=0;i<M;i++) //将文件中的信息写入结构体数组中并输出
{
fscanf(fp,"%s%s%s%f%d%s",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,&bk[i].price,&bk[i].flag,bk[i].readnu);
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
}
fclose(fp);
}
//读出学生信息
void read2()
{
FILE *fp;
int j;

if((fp=fopen("D:\\jz80243_stu.txt","r"))==NULL)
{printf("can not open file");
exit(0);
}

fgets(str2,81,fp);
puts(str2);

for(j=0;j<N;j++) //将文件中的信息写入结构体数组中并输出
{
fscanf(fp,"%s%s%s%d",stu[j].stunum,stu[j].stuname,stu[j].spe,&stu[j].borrow);
printf("%-15s%-16s%-18s%-8d\n",stu[j].stunum,stu[j].stuname,stu[j].spe,stu[j].borrow);
}
fclose(fp);

}
//按作者查询
void find_author()
{
char author[10];
int i;

printf("请输入作者名:");
scanf("%s",author);
puts(str1);

for(i=0;i<M;i++)
if(strcmp(author,bk[i].bkauthor)==0) //将输入的作者名与结构体数组中的作者名比较
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);

}

//按书名查询
void find_bkname()
{
char bkname[30];
int i;
printf("请输入书名:");
scanf("%s",bkname);
puts(str1);

for(i=0;i<M;i++)
if(strcmp(bkname,bk[i].bkname)==0) //将输入的书名与结构体数组中的书名比较
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);

}

//输出库存图书信息
void find_other()
{ int i;
for(i=0;i<M;i++)
if(bk[i].flag==1) //判断图书是否在库
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);

}

//借书
void booklend()
{
FILE *fp1,*fp2;
char stunumber[10],bkname[30];
int i,t;
printf("input the studentsnu:");
scanf("%s",stunumber);

for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i].stunum)==0)
{t=i;break;}
if(i==N) //输入的学号不在文件2中,不能借书
{ printf("NO find!Can't lend!\n");
return;
}

printf("input the bookname:");
scanf("%s",bkname);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i].bkname)==0 && bk[i].flag)
{
bk[i].flag=0;
strcpy(bk[i].readnu,stunumber);
stu[t].borrow++; //学生借阅本数加1
break;
}
if(i==M)
{
printf("该书不存在或已全部借出\n");
return;
}

//更改图书文件信息
if((fp1=fopen("D:\\jz80243_bk.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str1,fp1);
puts(str1);

for(i=0;i<M;i++) //将结构体中的数据写入文件
{
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
fprintf(fp1,"%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
}
fclose(fp1);

//更改学生文件信息
if((fp2=fopen("D:\\jz80243_stu.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str2,fp2);
puts(str2);

for(i=0;i<N;i++) //将结构体中的数据写入文件
{
printf("%-15s%-16s%-18s%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
fprintf(fp2,"%-15s%-16s%-18s%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
}
fclose(fp2);
}

//还书
void bookreturn()
{
FILE *fp1,*fp2;
int i,t;
char stunumber[10],bkname[30];
printf("input the studentsnu:");
fflush(stdin);
gets(stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i].stunum)==0)
if(stu[i].borrow!=0)
{t=i;break;}
else
{
printf("该生未借书,不能还书!\n");
return;
}
if(i==N)
{printf("未找到该生,不能还书!\n");return;}

printf("input the bookname:");
gets(bkname);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i].bkname)==0&&(bk[i].flag==0))
{
bk[i].flag=1;
strcpy(bk[i].readnu,"无");
stu[t].borrow--;
break;
}
if(i==M)
{printf("该书未借出或不存在!\n");return;}

//更改图书文件信息
if((fp1=fopen("D:\\jz80243_bk.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str1,fp1);
puts(str1);

for(i=0;i<M;i++) //将结构体中的数据写入文件
{
printf("%-8s%-20s%-16s%-14.2f%-8d%-10s\n",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
fprintf(fp1,"%s%s%s%f%d%s",bk[i].bknu,bk[i].bkname,bk[i].bkauthor,bk[i].price,bk[i].flag,bk[i].readnu);
}
fclose(fp1);

//更改学生文件信息
if((fp2=fopen("D:\\jz80243_stu.txt","w"))==NULL)
{
printf("can't open file");
exit(0);
}

fputs(str2,fp2);
puts(str2);

for(i=0;i<N;i++) //将结构体中的数据写入文件
{
printf("%-15s%-16s%-18s%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
fprintf(fp2,"%-15s%-16s%-18s%-8d",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
}
fclose(fp2);

}
void find_stu()
{
char stunumber[10];
int i,j;
printf("input studentsnum:");
scanf("%s",stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i].stunum)==0)
{
printf("学号:%-15s姓名:%-16s专业:%-18s借阅本数:%-8d\n",stu[i].stunum,stu[i].stuname,stu[i].spe,stu[i].borrow);
if(stu[i].borrow!=0)
printf("图书编号 书名 作者 单价 \n");
for(j=0;j<M;j++)
{
if(strcmp(stu[i].stunum,bk[j].readnu)==0)
printf("%-8s%-20s%-16s%-14.2f\n",bk[j].bknu,bk[j].bkname,bk[j].bkauthor,bk[j].price);
}
printf("\n\n\n");
break;

}
if(i==N) printf("该生不存在!!\n\n\n");

}

void main()
{ int i;
read1();
read2();
while(1)
{
printf("**********小型图书借阅管理系统***********\n");
printf("* 1.按作者查询图书 2.按书名查询图书 *\n");
printf("* 3.按条件查询图书 4.借 书 *\n");
printf("* 5.还 书 6.查询学生借书信息 *\n");
printf("* 0.退出系统 *\n");
printf("请选择(0~6):");
scanf("%d",&i);
switch(i)
{
case 1: find_author();break;
case 2: find_bkname();break;
case 3: find_other();break;
case 4: booklend();break;
case 5: bookreturn();break;
case 6: find_stu();break;
case 0: exit(0);
}
}

}

㈩ Unix系统C语言

这是一个头文件的宏标识,用来在编译的时候防止重复include同一个头文件而导致的变版量或函权数的定义声明发生冲突。

一般的使用是这样的:

#ifndef__RTL_COMPAT_H__

#define__RTL_COMPAT_H__

<头文件函数、变量等定义和声明>

#endif

这样,如果一个头文件a.h,里面包含了这个compat.h,另外一个b.c包含了这个a.h,并且也包含了compat.h,

a.h
#include"compat.h"
。。。

b.c
#include"a.h"
#include"compat.h"
。。。

那么这种宏定义就起作用了。

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919