當前位置:首頁 » 課程大全 » 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