1. 用 C語言 編寫 綜合實驗 職工信息管理系統
# include <iostream>
# include <fstream>
# include <string>
# include <iomanip>
# include <stdlib.h>
using namespace std;
struct worker_inf
{
int month; //月份
int code; //工人編號
string name; //姓名
float get[4]; //基本工資,津貼,房帖,交通補貼
float pay[4]; //房枯滑租,儲蓄,交通費,會費
float tax; //個人所得稅
float theory_num; //應發書
float rece_num; //應扣數
float practice_num; //實發數
worker_inf *next;
};
/////////////////////////////////////////////////////////////////
class worker //定義職工類
{
private:
worker_inf *head;
void print(worker_inf *); //輸出一條指定職工的工資記錄,並返回該記錄的指針
worker_inf *find(int); //查找條例條件的記錄,並返回該記錄的指針
public:
worker(){head=NULL;}
worker_inf *get_head(){return head;}
int listcount(); //統計當前鏈表的記錄總數,並返回一個整數
void additem(int month,int code,string name,float get[4],float pay[4]); //添加一條工資記錄表尾
void removeitem(int); //刪除一條指定職謹敗簡工的工資記錄
int menu(); //修改某職工工資的菜單
void changemonth(); //修改月份
void changeitem(int); //修改職工的工資信息
void list(); //輸出當月全體職工的工資信息
void search(int); //輸出指定編號職工的工資信息
float tax_num(); //計算職工個人所得稅
float theorynumber(); //計算應發工資
float recenumber(); //計算應扣工資
float practicenumber(); //計算實發工資
};
//////////////////////////////////////////////////////////////////
int worker::listcount() //統計當前鏈表數,並返回一個整數
{
if(!head)return 0;
worker_inf *p=head;
int n=0;
while(p)
{n++;p=p->next;}
return n;
}
//////////////////////////////////////////////////////////////////
void worker::additem(int month,int code,string name,float get[4],float pay[4]) //添加一條工資記錄到表尾
{
if(!head)
{
head=new worker_inf;
for(int i=0;i<4;i++)
{
head->get[i]=get[i];
head->pay[i]=pay[i];
}
head->code=code;
head->month=month;
head->name=name;
head->next=NULL;
return;
}
worker_inf *t=head;
while(t && t->code!=code)
t=t->next;
if(t)
{
cout<<"操作失敗:編號為"<<code<<祥褲"的記錄已經存在!"<<endl;
return;
}
worker_inf *p=head;
while(p->next)p=p->next;
worker_inf *p1=new worker_inf;
p1->code=code;
for(int i=0;i<4;i++)
{
p1->get[i]=get[i];
p1->pay[i]=pay[i];
}
p1->code=code;
p1->month=month;
p1->name=name;
p1->next=NULL;
p->next=p1;
return;
}
////////////////////////////////////////////////////////////////////
void worker::removeitem(int code) //刪除一條指定職工的工資記錄
{
worker_inf *t=find(code);
if(!t)return;
worker_inf *p=head;//如果要刪除的記錄位於表頭
if(head==t)
{
head=head->next;
delete p;
cout<<"成功刪除編號為"<<code<<"的記錄!"<<endl<<endl;
return;
}
while(p->next!=t)p=p->next;
worker_inf *p1=p->next;
p->next=p1->next;
delete p1;
cout<<"成功刪除編號為"<<code<<"的記錄!"<<endl<<endl;
return;
}
////////////////////////////////////////////////////////////////
int worker::menu() //修改某一職工信息的菜單
{
int select=-1;
cout<<"\t\t\t\t\t\t**************修改菜單**************"<<endl<<endl;
cout<<"1.基本工資"<<endl<<endl;
cout<<"2.津貼"<<endl<<endl;
cout<<"3.房帖"<<endl<<endl;
cout<<"4.交通補貼"<<endl<<endl;
cout<<"5.房租"<<endl<<endl;
cout<<"6.儲蓄"<<endl<<endl;
cout<<"7.交通費"<<endl<<endl;
cout<<"8.會費"<<endl<<endl;
cout<<"0.退出修改系統"<<endl<<endl;
cout<<"[請選擇(輸入相應數字)]:";
cin>>select;
if(select<0||select>9)
{
cout<<"對不起您輸入錯誤!請重新輸入【0-9】:"<<endl;
cin>>select;
}
return select;
}
/////////////////////////////////////////////////////////////////
int menu();
void worker::changeitem(int code) //修改某職工部分工資信息
{
worker_inf *p=find(code);
if(!p){cout<<"不存在職工編號為"<<code<<"的職工工資信息"<<endl;return;}
int select;
while(1)
{
float m;
select=menu();
if(select==0){system("cls");break;}
cout<<"請輸入修改後的值";
cin>>m;
int n;
if(select<=4){
n=select-1;
p->get[n]=m;}
else{
n=select-5;
p->pay[n]=m;}
tax_num();
theorynumber();
recenumber();
practicenumber();
cout<<"修改成功"<<endl;
}
}
////////////////////////////////////////////////////////////////////
void worker::changemonth() //修改月份
{
worker_inf *p=head;
while(p)
{
if(p->month==12)p->month=1;
else
p->month++;
p=p->next;
}
}
//////////////////////////////////////////////////////////////////////
void worker::print(worker_inf *p)//輸出worker_inf制定的記錄
{
cout.precision(0);
cout<<p->month<<" ";
cout<<p->code<<" ";
cout<<p->name<<"\t";
for(int i=0;i<4;i++)
{cout<<setiosflags(ios::fixed)<<p->get[i]<<"\t";}
for(int j=0;j<4;j++)
{cout<<p->pay[j]<<"\t";}
cout<<p->tax<<"\t";
cout<<p->theory_num<<"\t";
cout<<p->rece_num<<"\t";
cout<<p->practice_num<<endl<<endl;
return;
}
///////////////////////////////////////////////////////////////////////
void worker::list() //列出當前鏈表中的所有記錄
{
if(listcount==0)
{
cout<<"錯誤:當前的列表為空!"<<endl;
return;
}
worker_inf *p=head;
cout<<"共有記錄:"<<listcount()<<endl;
cout<<"月份\t編號\t姓名\t基本工資\t津貼\t房帖\t交通補貼\t房租\t儲蓄\t交通費\t會費\t個人所得稅\t應發工資\t應扣工資\t實際工資"<<endl;
while(p)
{
print(p);
p=p->next;
}
cout<<endl;
return;
}
/////////////////////////////////////////////////////////////////////////
void worker::search(int code) //在當前鏈表查找指定記錄並輸出
{
cout<<"searching....."<<endl;
worker_inf *p=find(code);
if(p)
{
cout<<"月份\t編號\t姓名\t基本工資\t津貼\t房帖\t交通補貼\t房租\t儲蓄\t交通費\t會費\t個人所得稅\t應發工資\t應扣工資\t實際工資"<<endl;
print(p);
}
cout<<endl;
}
//////////////////////////////////////////////////////////////////////////
worker_inf *worker::find(int code) //查找條例條件的記錄,並返回該指針
{
if(listcount==0)
{
cout<<"錯誤:當前列表為空!"<<endl;
return NULL;
}
worker_inf *p=head;
while(p)
{
if(p->code==code)break;
p=p->next;
}
if(!p)
{
cout<<"錯誤:找不到該記錄!\n";
return NULL;
}
return p;
}
//////////////////////////////////////////////////////////////////////////
float worker::theorynumber() //計算應發數
{
int i;
if(listcount()==0)
{
cout<<"錯誤:當前的列表為空!"<<endl;
return -1;
}
float sum;
worker_inf *p=head;
while(p)
{
sum=0;
for(i=0;i<4;i++)
sum+=p->get[i];
p->theory_num=sum;
p=p->next;
}
return 0;
}
//////////////////////////////////////////////////////////////////
float worker::tax_num() //計算個人所得稅
{
if(listcount==0)
{
cout<<"錯誤:當前的列表為空!"<<endl;
return -1;
}
worker_inf *p=head;
while(p)
{
float s;
s=p->theory_num;
if(s<=800)
p->theory_num=0;
else if(s<=2000) p->theory_num=(s-800)*0.05;
else if(s<=5000)
p->theory_num=(s-2000)*0.1+60;
else p->theory_num=(s-5000)*0.2+360;
p=p->next;
}
return 0;
}
///////////////////////////////////////////////////////////////////////
float worker::recenumber() //計算應扣數
{
int i;
if(listcount==0)
{
cout<<"錯誤:當前的列表為空!"<<endl;
}
float sum;
worker_inf *p=head;
while(p)
{
sum=0;
for(i=0;i<4;i++)
sum+=p->pay[i];
p->rece_num=p->tax+sum;
p=p->next;
}
return 0;
}
/////////////////////////////////////////////////////////////////////////
float worker::practicenumber() //計算實發數
{
if(listcount()==0)
{
cout<<"錯誤:當前的列表為空!"<<endl;
return -1;
}
worker_inf *p=head;
while(p)
{
float a,b;
a=p->theory_num;
b=p->rece_num;
p->practice_num=a-b;
p=p->next;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////
worker worker; //定義全局變數
int menu()
{
int select=-1;
cout<<"*****************主菜單***********************"<<endl<<endl;
cout<<"1.添加職工信息;"<<endl<<endl;
cout<<"2.刪除職工信息;"<<endl<<endl;
cout<<"3.修改職工的工資信息;"<<endl<<endl;
cout<<"4.按職工編號查找記錄;"<<endl<<endl;
cout<<"5.列出所有記錄;"<<endl<<endl;
cout<<"6.從數據文件導入當月工資信息;"<<endl<<endl;
cout<<"7.將當月工資信息導出到磁碟文件;"<<endl<<endl;
cout<<"0.安全退出系統;"<<endl<<endl;
cout<<"[請選擇(輸入相應的數字)]:";
cin>>select;
return select;
}
/////////////////////////////////////////////////////////////////////////////
char exit()
{
char s;
cout<<"確定要退出程序嗎?[Y/N]:";
cin>>s;
return s;
}
//////////////////////////////////////////////////////////////////////////////
void input(int *month,int*code,string *name,float get[4],float pay[4]) //輸入職工信息
{
cout<<"請輸入月份 編號 姓名 基本工資 津貼 房帖 交通補貼 房租 儲蓄 交通費 會費:"<<endl;
cin>>*month;
cin>>*code;
if(*code==-1)return;
cin>>*name>>get[0]>>get[1]>>get[2]>>get[3]>>pay[0]>>pay[1]>>pay[2]>>pay[3];
return;
}
///////////////////////////////////////////////////////////////////////////////
void addnew() //增加記錄
{
int month=0,code=0;float get[4]={0},pay[4]={0};
string name="";
cout<<endl<<"當輸入的職工編號為-1時表示輸入結束。"<<endl;
input(&month,&code,&name,get,pay);
while(code!=-1)
{
worker.additem(month,code,name,get,pay);
worker.tax_num();
worker.theorynumber();
worker.recenumber();
worker.practicenumber();
input(&month,&code,&name,get,pay);
}
return;
}
////////////////////////////////////////////////////////////////////////////////
void dofind() //按職工編號查找
{
int code;
cout<<endl<<"當輸入的編號為-1時表示結束輸入."<<endl;
do
{
cout<<"請輸入要查找的職工的編號:";
cin>>code;
if(code==-1)continue;
worker.search(code);
}while(code!=-1);
return;
}
/////////////////////////////////////////////////////////////////////////////////
void dodelete() //刪除職工信息
{
cout<<endl<<"當輸入的編號為-1時表示輸入結束."<<endl;
int code;
do
{
cout<<"請輸入要刪除的職工的編號:";
cin>>code;
if(code==-1)continue;
worker.removeitem(code);
}while(code!=-1);
return;
}
///////////////////////////////////////////////////////////////////////////////////
void domodify() //修改職工信息
{
int code;
cout<<"當輸入職工編號為-1時表示結束修改"<<endl;
while(1){
cout<<"請輸入所需修改職工編號";
cin>>code;
if(code==-1)return;
else
worker.changeitem(code);
}
return;
}
///////////////////////////////////////////////////////////////////////////////////
void SaveFilethism()//將當月工資信息寫入文件
{
worker_inf *p;
char name[20];
fstream iofile;
int i=0;
iofile.open("Worker_5th.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"open error!"<<endl;
abort();
}
p=worker.get_head();
while(p)
{
p->name.(name,20,0);
name[p->name.length()]=0;
iofile.write((char *) &p->code,sizeof(int));
iofile.write((char *) &p->month,sizeof(int));
iofile.write((char *) name,20);
for(int i=0;i<4;i++)
{
iofile.write((char *) &p->get[i],sizeof(float));
}
for(int j=0;j<4;j++)
{
iofile.write((char *) &p->pay[j],sizeof(float));
}
p=p->next;
}
iofile.close();
cout<<"成功將工資信息存入文件"<<endl;
}
////////////////////////////////////////////////////////////////////////
void Loadfilethism() //讀取當月全體職工的工資信息文件
{
int month,code;
char name[20]="";
float get[4],pay[4];
fstream iofile;
int i=0;
iofile.open("Worker_5th.dat",ios::in|ios::binary);
if(!iofile)
{
cout<<"數據文件不存在,請先建立該文件"<<endl;
return;
}
if(iofile.eof())
{
cout<<"資料庫為空,請先添加數據"<<endl;
iofile.close();
}
else
{
while(iofile.peek()!=EOF)//peek()是取文件當前指針,EOF是文件尾標符
{
iofile.read((char *) &code,sizeof(int));
iofile.read((char *) &month,sizeof(int));
iofile.read((char *) name,20);
for(int i=0;i<4;i++)
{
iofile.read((char *) &get[i],sizeof(float));
} for(int j=0;j<4;j++)
{
iofile.read((char *) &pay[j],sizeof(float));
}
worker.additem(code,month,name,get,pay);
}
worker.tax_num();
worker.theorynumber();
worker.recenumber();
worker.practicenumber();
iofile.close();
cout<<"成功導入工資信息"<<endl;
}
}
/////////////////////////////////////////////////////////////////////////
void list()
{
worker.list();
}
/////////////////////////////////////////////////////////////////////////
int main()
{
cout<<"******************歡迎進入職工工資管理系統*******************"<<endl<<endl;
int select;
char s;
while(1)
{
select=menu();
switch(select)
{
case 0: //退出程序
s=exit();
if(s=='y'||s=='Y') return 0;
break;
case 1: //增加新記錄
addnew();
break;
case 2: //刪除記錄
dodelete();
break;
case 3: //修改記錄
domodify();
break;
case 4: //按條件查找
dofind();
break;
case 5: //列出全部記錄
list();
break;
case 6: //導入當月職工記錄
Loadfilethism();
break;
case 7: //將職工記錄存入磁碟
SaveFilethism();
break;
default:
cout<<"此輸入無效!"<<endl;
}
}
return 0;
}
2. 用C語言編輯程序:教小學生學算術。
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int n;
void voice(void);
void welcome_text();
void c_text();
int gwjj();
int swjj();
int gwcc();
int swcc();
int szhh();
void graph()
{ clrscr();
textcolor(YELLOW);
gotoxy(10,10);
cprintf("*********************************************************");
gotoxy(10,11);
cprintf("*");
gotoxy(10,12);
cprintf("*");
gotoxy(10,13);
cprintf("*");
gotoxy(10,14);
cprintf("*");
gotoxy(10,15);
cprintf("*");
gotoxy(10,16);
cprintf("*");
gotoxy(10,17);
cprintf("*");
gotoxy(10,18);
cprintf("**********************************************************");
gotoxy(67,10);
cprintf("*");
gotoxy(67,11);
cprintf("*");
gotoxy(67,12);
cprintf("*");
gotoxy(67,13);
cprintf("*");
gotoxy(67,14);
cprintf("*");
gotoxy(67,15);
cprintf("*");
gotoxy(67,16);
cprintf("*");
gotoxy(67,17);
cprintf("*");
}
void choose()
{textcolor(RED);
gotoxy(25,11);
cprintf("Welcome to Pupil's CAI System");
textcolor(11);
gotoxy(35,12);
cprintf("MENU");
textcolor(WHITE);
gotoxy(11,13);
cprintf("Ge wei jia jian(press 1)");
gotoxy(39,13);
cprintf("Shi wei jia jian(press 2)");
gotoxy(11,15);
cprintf("Ge wei cheng chu(press 3)");
gotoxy(39,15);
cprintf("Shi wei cheng chu(press 4)"昌梁扮);
gotoxy(27,17);
cprintf("si ze hun he (press 5)");
}
void main()
{ int c,l1,l2,l3,l4,l5;
graph();
choose();
printf("\r\n\n\n\n");
scanf("%d",&c);
switch(c)
{case 1:clrscr();l1=gwjj();if(l1==0) break;
case 2:clrscr();l2=swjj();if(l2==0) break;
case 3:clrscr();l3=gwcc();if(l3==0) break;
case 4:clrscr();l4=swcc();if(l4==0) break;
case 5:clrscr();l5=szhh();if(l5==0) break;
}
graph();
choose();
}
int gwjj()
{ int k1,k2,k,t=0,f=0,p,v,l1,a;
welcome_text();
printf("how many subject do you want to do?\n");
scanf("渣啟%d",&n);
do
{for(p=0;p<n;p++)
{ k1=rand()%10;
k2=rand()%10;
if(rand()%2)
printf("耐灶%d+%d= ",k1,k2);
else
{if(k1<k2){ a=k2;k2=k1;k1=a;}
printf("%d-%d= ",k1,k2);
k2=-k2;
}
scanf("%d",&k);
if(k==k1+k2)
{t++;printf("Very good,you are right!\n");}
else
{f++;
printf("Sorry,you answer is wrong,you could input again:");voice();
scanf("%d",&k);
if(k!=k1+k2)
{k=k1+k2;
printf("The answer is:%d\n",k);
}
else
printf("Now you answer is true\n");
}
}
v=(t/n)*100;
if(v>=80)
{ c_text();
scanf("%d",&l1);
if(l1==1)return 1;
else return 0;
}
else
{printf("You should try again,are you?1 yes,0 no\n");
scanf("%d",&l1);
if(l1==1)continue;
else
return 0;
}
}while(1);
}
int swjj()
{int k1,k2,k,t=0,f=0,v,p,l2,a;
welcome_text();
printf("how many subject do you want to do?\n");
scanf("%d",&n);
do
{ for(p=0;p<n;p++)
{k1=rand()%100;
k2=rand()%100;
if(rand()%2)
printf("%d+%d= ",k1,k2);
else
{ if(k1<k2){a=k2;k2=k1;k1=a;}
printf("%d-%d= ",k1,k2);
k2=-k2;
}
scanf("%d",&k);
if(k==k1+k2)
{t++;printf("Very good,you are right!\n"); }
else
{f++;
printf("Sorry,you answer is wrong,you could input again:");voice();
scanf("%d",&k);
if(k!=k1+k2)
{k=k1+k2;
printf("The answer is:%d\n",k);
}
else
printf("Now your answer is true!\n");
}
v=(t/n)*100;
if(v>=80)
{c_text();
scanf("%d",&l2);
if(l2==1)return 1;
else return 0;
}
else
{printf("You should try again,are you?1 yes,2 no\n");
scanf("%d",&l2);
if(l2==1)continue;
else
return 0;
}
}
}while(1);
}
int gwcc()
{int k1,k2,k,t=0,f=0,v,p,l3,a=0;
welcome_text();
printf("how many subject do you want to do?\n");
scanf("%d",&n);
do
{for(p=0;p<n;p++)
{k1=rand()%10;
k2=rand()%10;
if(rand()%2)
printf("%d*%d= ",k1,k2);
else
{k2=k2+1;
k1=k1*k2;
printf("%d/%d= ",k1,k2);
a=1;
}
scanf("%d",&k);
if(a==0)
{if(k==k1*k2)
{t++;printf("Very good,you are right!\n");}
else
{f++;
printf("Sorry,you answer is wrong,you could input again:");
voice();
scanf("%d",&k);
if(k!=k1*k2)
{k=k1*k2;
printf("The answer is:%d\n",k);
}
else
printf("Now your answer is true!\n");
}
}
else
{if(k==k1/k2){t++;printf("Very good,you are right!\n");}
else
{ f++;
printf("Sorry,you answer is wrong,you could input again:");
voice();
scanf("%d",&k);
if(k!=k1/k2)
{k=k1/k2;
printf("The answer is:%d",k);
}
else
printf("Now your answer is true!\n");
}
}
}
v=(t/n)*100;
if(v>=80)
{c_text();
scanf("%d",&l3);
if(l3==1) return 1;
else return 0;
}
else
{printf("You should try again,are you?1 yes,0 no\n");
scanf("%d ",&l3);
if(l3==1)continue;
else
{return 0;}
}
}while(1);
}
int swcc()
{ int k1,k2,k,t=0,f=0,p,v,l4,a=0;
welcome_text();
printf("how many subject do you want to do?\n");
scanf("%d",&n);
do
{ for(p=0;p<n;p++)
{
k1=rand()%100;
k2=rand()%100;
if(rand()%2)
printf("%d*%d= ",k1,k2);
else
{k2=k2+1;
k1=k2*k1;
printf("%d/%d= ",k1,k2);
a=1;
}
scanf("%d",&k);
if(a==0)
{if(k==k1*k2)
{t++;printf("Very good,you are right!\n");}
else
{f++;
printf("Sorry,you answer is wrong,you could input again:");
voice();
scanf("%d",&k);
if(k==k1*k2)
{k=k1*k2;
printf("The anwser is:%d",k);
}
else
printf("Now your answer is true!\n");
}
}
else
{
if(k==k1/k2)
{t++;printf("True\n");}
else
{f++;printf("Wrong\n");voice();}
}
}
v=(t/n)*100;
if(v>=80)
{c_text();
scanf("%d",&l4);
if(l4==1) return 1;
else return 0;
}
else
{printf("You should try again,are you?1 yes,0 no\n");
scanf("%d",&l4);
if(l4==1)continue;
else
return 0;
}
}while(1);
}
int szhh()
{ int k1,k2,t=0,f=0,p,v,k,x,l5;
printf("How many subject do you want to do?/n");
scanf("%d",&n);
do
{ for(p=0;p<n;p++)
{k1=rand()%10;
k2=rand()%10;
if(rand()%2)
{printf("%d*%d-%d= ",k1,k2,k1);
scanf("&d",&k);
if(k==k1*k2-k1)
{t++;printf("Very good,you are right!\n"); }
else
{f++;
printf("sorry,your answer is wrong,you could input again:");
scanf("%d",&k);
if(k!=k1*k2-k1)
{x=k1*k2-k1;
printf("The answer is:%d\n",x);
}
else
{printf("Now your answer is true\n");}
}
}
else
{if(k1>k2)
{k2=k2+1;
k1=k2*k1;
printf("%d+%d/%d= ",k2,k1,k2);
scanf("%d",&k);
if(k==k2+k1/k2)
{t++;printf("Very good,you are right!\n");}
else
{f++;
printf("Sorry,your answer is wrong,you could input again:");
scanf("%d",&k);
if(k!=k2+k1/k2)
{x=k2+k1/k2;
printf("the answer is:%d\n",x);
}
else
{printf("This time your answer is true\n"); }
}
}
else
{k1=k1+1;
k2=k1*k2;
printf("%d-%d/%d= ",k2,k2,k1);
scanf("%d",&k);
if(k==k2-k2/k1)
{t++;printf("Very good,you are right!\n");}
else
{f++;
printf("Sorry,your answer is wrong,you could input again:");
scanf("%d",&k);
if(k!=k2-k2/k1)
{x=k2-k2/k1;
printf("The answer is:%d\n",x);
}
else
{printf("This time your answer is true\n");}
}
}
}
}
v=(t/n)*100;
if(v>=80)
{c_text();
scanf("%d",&l5);
if(l5==1) return 1;
else return 0;
}
else
{printf("You should try again,are you?1 yes,0 no\n");
scanf("%d ",&l5);
if(l5==1)continue;
else
{return 0;}
}
}while(1);
}
void voice()
{sound(500);
delay(100000);
nosound();
}
void welcome_text()
{textcolor(RED);
gotoxy(2,2);
cprintf("Welcome Here:\r\n");
}
void c_text()
{textcolor(RED);
cprintf("Congratulations,whether go to next step?1 yes,0 no\n");
}
3. 挑戰c-free
這些事情還是應該自己做!
4. 用C語言設計一個簡單計算器的課程設計(希望能盡可能的詳細,多一些)
//名字記不太清了,這個叫遞歸下降演算法,但這個演算法肯定是首先在編譯原理中的,主要用在
//各種編譯器中。就是現掃描整個表達式字元串,把其中的運算符找出來,判斷它們的優先順序
//然後按從左到右的順序先計算把優先順序低的運算符和它兩邊的數據壓入,這樣循環做過以後
//再從頭取出一個一個計算,表達式的結構類似與二叉樹,遍歷二叉樹後把結果存在連表中供
//計算。你這個程序問題好像比較多啊。用的數據結構類型和函數名根本就不配套
#include <stdio.h>
struct s_node //節點結構體
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;
link push(link stack,int value) //向鏈表添加數據
{
link newnode;
newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}
link pop(link stack,int *value) //從鏈表取出數據
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
}
int empty(link stack) //判斷鏈表是否為空
{
if(stack==NULL)
return 1;
else
return 0;
}
int is_operator(char operator) //判斷是否是運算符號
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}
int priority(char operator) //判斷運算符優先順序
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}
int two_result(int operator,int operand1,int operand2) //計算數值,計算器的核心
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}
void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;
printf("\nPlease input the inorder expression:");
gets(expression);
while(expression[position]!='\0'&&expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])<= priority(operator->data)&&
!empty(operator))
{
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operator=pop(operator,&op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,&op);
operand=pop(operand,&operand1);
operand=pop(operand,&operand2);
operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
}
5. 學生信息管理系統設計 學生信息包括:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail等。試設計一
北科大? qq122465000 有問題可以問我
我的自己弄得 你試試 我科大的
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct student{
int id;
char name[10];
int age;
char sex[3];
int year;
int month;
int day;
char address[100];
char email[100];
}st[50];
int i=0;
void shuru() //輸入學員信息函數
{
char a;
do{
printf("\n請輸入學號:");
scanf("%d",&st[i].id);
fflush(stdin);
printf("\n請輸入姓名:");
gets(st[i].name);
printf("請輸入年齡:");
scanf("%d",&st[i].age);
printf("\n請輸入性別:");
桐鉛此scanf("%s",&st[i].sex);
fflush(stdin);
printf("\n請輸入出生年,月,日:");
scanf("%d,%d,%d",&st[i].year,&st[i].month,&st[i].day);
fflush(stdin);
printf("\n請輸入地址:");
scanf("%s",&st[i].address);
printf("\n請輸入email:");
scanf("%s",&st[i].email);
printf("\n是否繼續輸入另外一個學員信息?(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y' && i<=50);
}
void xianshi() //顯示輸入後的學員信息函數
{
int j;
for(j=0;j<i;j++)
printf("學號\t%d\n姓名\t%d\局迅n性別\t%s\n出生日期\t%d-%d-%d\n地址\t%s\nemail\t%s\n",st[j].id,st[j].name,st[j].sex,st[j].year,st[j].month,st[j].day,st[j].address,st[j].email);
}
void paixu() //按學號分從大到小排序函數
{
int j,k;
int temp;
for(j=0;j<i;j++)
{
for(k=0;k<i-1-j;k++)
{
if(st[k].id>st[k+1].id)
{
temp=st[k].id;
st[k].id=st[k+1].id;
st[k+1].id=temp;
}
}
}
xianshi(); //排序後輸出
}
void chazhao() //查找某個學員的信息函數
{
int m;
char name[20],b;
do
{
printf("\n請輸入想查找的學員姓名:");
fflush(stdin);
gets(name);
for(m=0;m<i;m++)
{
if(strcmp(name,st[m].name)==0)
{
printf("\n\t\t您查找的學員在第%d個位置找到了!!!\n",m+1);
break;
}
}
if(m>=20)
printf("\n\t\t沒有找到這個學員!!!\n");
else
{
printf("學號\t%d\n姓名\t%d\n性別\t%s\n出生日期\t%d-%d-%d\n地址\t%s\nemail\t%s\n",st[m].id,st[m].name,st[m].sex,st[m].year,st[m].month,st[m].day,st[m].address,st[m].email);
}
printf("\n是否查找另一個學員的信息?(y/n)");
fflush(stdin);
b=getchar();
激臘}while(b=='y');
}
void shanchu() //刪除學員信息函數
{
char name[20],c;
int a,b;
do
{
printf("\n請輸入要刪除的學員姓名:\n");
fflush(stdin);
gets(name);
for(a=0;a<i;a++)
{
if(strcmp(name,st[a].name)==0)
break;
}
for(b=a;b<i;b++)
st[b]=st[b+1];
if(a>i)
printf("\t\t沒有找到這個學員!!!\n");
else
{
i--;
xianshi();
}
printf("\n是否繼續刪除另一個學員信息?(y/n) ");
fflush(stdin);
c=getchar();
}while(c=='y');
}
void main() //主函數
{
int change;
do{
system("cls");
printf("============================學員信息管理系統===================================\n");
printf("\t\t\t一: 輸入學員信息\n");
printf("\t\t\t二: 顯示學員信息\n");
printf("\t\t\t三: 查找學員信息\n");
printf("\t\t\t四: 刪除學員信息\n");
printf("\t\t\t五: 按學號排序信息\n");
printf("\t\t\t六: 退出程序\n");
fflush(stdin);
printf("\t\t\t請輸入功能選項:");
scanf("%d",&change);
switch(change)
{
case 1:
shuru(); break;
case 2:
xianshi(); break;
case 3:
chazhao(); break;
case 4:
shanchu(); break;
case 5:
paixu(); break;
case 6:
break;
}
getch();
}while(change!=6);
}
6. C語言中程序設計組成框圖與流程圖的區別
設計組成框圖其實就是模塊圖,主要是表示軟體的模塊結構及模塊間的關系;
程序流程圖則表示的是程序的執行流程;
還有數據流程圖表示的是數據的加工情況。
7. 系統組成框圖怎麼畫
系統組成框圖畫法如下:
1、首先需要把文字寫上,添加邊框和底紋。
2、特殊符號用插入裡面的特殊符號。
3、使用MATLAB軟體的simulation畫系統方框圖。
系統結構圖是對軟體系統結構的總體設計的圖形顯示,在需蘆模緩求分析階段,已經從系統開發的陪模角度出發,把系統按功能逐次分割成層次結構,使每一部分完成簡單的功能且各個部分之間又保持一定的聯系,這就是功能設計。在設計階段,基於這個功能的層次結構把各個部分組合起來成為系統。結構化設計方法使用的描述方式是系統結構圖,也稱結構圖或控制結構圖。它表示了一個系統(或功能模塊)的層次分解關系,模塊之間的調用關系,以及模塊之間數據流和控制流信息的傳遞關系系統結構圖反映的是系統中模塊的碼納調用關系和層次關系,誰調用誰,有一個先後次序(時序)關系。所以系統結構圖既不同於數據流圖,也不同於程序流程圖。
8. 單片機總體設計框圖怎麼畫
大概是這樣畫的
1開始,2開發鍵鬧板塊初始州汪化,3點亮第一個LED,4延時1S,5左移經過8次,是的話轉到第3步,冊亮仔否的話po左移一位,轉到第5步。
9. C++學習問題
要看你有沒有決心啦!
你只要完完整整的做幾個課程設計,基本上你就學會了!
課程設計題目蠻多的!
你可以自己搜搜,也可做下面的!做完後在搜搜答案,看看別人的代碼與自己的不同,還有自己的代碼可以改進的地方!
C語言課程設計題目
學生選題說明
以學院所發課程設計要求為准,請同學們仔細閱讀。
C語言課程設計
設計要求與設計報告
設計要求:
可自己選定一題目,限1人選的題目只能由1人單獨完成,限2人選的題目可由1-2人完成。
模塊化程序設計l
鋸齒型書寫格式l
必須上機調試通過
設計報告格式:
1、設計目的
2、總體設計(程序設計組成框圖、流程圖)
3、詳細設計(模塊功能說明(如函數功能、入口及出口參數說明,函數調用關系描述等)
4、調臘神試與測試:調試方法,測試結果的分析與討論,測試過程中遇到的主要問題及採取的解決措施
5、源程序清單和執行結果:清單中應有足夠的注釋
檢查要求:
1、每個人必須有可運行的程序(學期末檢查);
2、每個人必須交《C語言課程設計報告》(列印稿)
打分標准:
1、根據平時上機考勤;注重平時上機成績,教師要不定輪亂虧期檢查學生進度,學生不得以自己有私人電腦為借口而不來上機。
2、根據程序運行結果;
3、根據《C語言課程設計報告》,學生能對自己的程序面對教師提問並能熟練地解釋清楚
以上三項缺一不可,否則不能到得相應學分
1、職工信息管理系統設計(限最多2人完成)
職工信息包括職工號、姓名、性別、年齡、學歷、工資、住址、電話等(職工號不重復)。試設計一職工信息管理系統,使之能提供以下功能:
系統以菜單方式工作v
職工信息錄入功能(職工信息用文件保存)--輸入v
職工信息瀏覽功能 --輸出v
查詢和排序功能:(至少一種查詢方式) --演算法v
l 按工資查詢
l 按學歷查詢等
職工信息刪除、修改功能(任選項)v
2、圖書信息管理系統設計(限最多2人完成)
圖書信息包括:登錄號、書名、作者名、分類號、出版單位、出版時間、價格等。試設計一圖書信息管理系統,使之能提供以下功能:
系統以菜單方式工作v
圖書信息錄入功能(圖書信息用文件保存)--輸入v
圖書信息瀏覽功能--輸出v
查詢和排序功能:(至少一種查詢方式)--演算法v
l 按書名查詢
l 按作者名查詢
圖書信息的刪除與修改(可選項)v
3、學生信息管理系統設計(限最多2人完成)
學生信息包括:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail等。試設計一學生信息管理系統,使之能提供以下功能:
系統以菜單方式工作
學生信息錄入功能(學生信息用文件保存)---輸入
學生信息瀏覽功能---輸出
查詢、排序功能---演算法
按學號查詢
按姓名查詢
學生信息的刪除與修改(可選項)
4、學生選修課程系統設計(限最多2人完成)
假定有n門課程,每門課程有課程編號,課程名稱,課程性質,總學時,授課學時,實驗或上機學時,學分,開課學期等信息,學生可按要求(如總學分不得少於60)自由選課。試設計一選修課程系統,使之能提供以下功能:
系統以菜單方式工作v
課程信息錄入功能(課程信息用文件保存)--輸入v
課程信息瀏覽功能--輸出v
查詢功能:(至少一種查詢方式)--演算法v
按學分查詢l
按課程性質查詢l
學生選修課程(可選項)v
5、銷售管理系統 (限最多2人完成)
某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當天出售的每種產品各寫一張便條交上來。每張便條包含內容:
1)銷售員的代號
2)產品的代號
3)這種產品的當天的銷售額
每位銷售員每天可能上繳0-5張便條。假設,收集到了上個月的所有便條,編寫一陪告個處理系統,讀取上個月的銷售情況(自己設定),進行如下處理。
1)計算上個月每個人每種產品的銷售額。
2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)
3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額)
4)輸出統計報表
銷售統計報表
產品代號 銷售之和
銷售員代號 1 2 3 4 5
1
2
3
4
每種產品之和 總和
6、設計一個簡單計算器(限最多1人完成)
要求: 在功能上功能盡量模擬windows操作系統中的計算器,系統界面不做強制要求。
7、編寫一萬年歷系統(限最多1人完成)
要求: 模仿現實生活中的掛歷.
當前頁以系統當前日期的月份為准顯示當前月的每一天(顯示出日及對應的星期幾).
當系統日期變到下一月時,系統自動翻頁到下一月.
8、學生成績管理(限最多2人完成)
1.主要功能:
(1)能按學期、按班級完成對學生成績的錄入、修改
(2)能按班級統計學生的成績,求學生的總分及平均分,並能根據學生的平均成績進行排序
(3)能查詢學生成績,不及格科目及學生名單
(4)能按班級輸出學生的成績單
9、通訊錄管理(限最多1人完成)
1.主要功能:
(1)能建立、修改和增刪學生通訊錄
(2)能夠按多種方式進行查詢
2.要求:界面友好,易於操作
10、一元多項式簡單的計算器(限最多1人完成)
1主要功能:
(1)輸入並建立多項式;
(2)輸出多項式;
(3)兩個多項式相加,建立並輸出和多項式;
(4)兩個多項式相減,建立並輸出差多項式。
(5)演算法的時間復雜度、另外可以提出演算法的改進方法
實現提示:可選擇帶頭結點的單向循環鏈表或單鏈表存儲多項式,頭結點可存放多項式的參數,如項數等。
2.要求:一元多項式簡單計算器的基本功能
11、圖書管理系統(限最多2人完成)
1、功能描述
新進圖書基本信息的輸入。
2. 圖書基本信息的查詢。
3. 對撤消圖書信息的刪除。
4. 為借書人辦理注冊。
5.辦理借書手續(非注冊會員不能借書)。
6.辦理還書手續
信息描述:有關該系統基本信息的描述,如:圖書名稱、圖書編號、單價、作者、存在狀態、借書人姓名、性別、學號等
12、校園導游咨詢(限最多1人完成)
1、功能描述:設計你的學校的校園平面圖,所含景點不少於10個。以圖中頂點表示學校各景點,存放景點名稱,代號,簡介等信息;以邊表示路徑,存放路徑長度等相關信息。
2、為來訪客人提供圖中任意景點的問路查詢,即查詢任意兩個景點之間的一條最短的簡單路徑。
3、為來訪客人提供圖中任意景點相關信息的查詢。
測試數據:由讀者根據實際情況指定。
實現提示:一般情況下,校園的道路是雙向通行的,可設校園平面圖是一個無向網,頂點和邊均含有相關信息。
13、簡單的行編緝器(限最多1人完成)
要求:設置一個簡單的行編緝器,每行以回車結束。
數據以文件形式存儲
編輯器具有查找、替換、修改數據的功能。
14、用棧來設置密碼(限最多1人完成)
要求:用棧來做一個密碼驗證程序,密碼驗證只有三次機會。
15、雙向鏈表的排序(限最多1人完成)
要求:輸入一個雙向鏈表,顯示些雙向鏈表並對此雙向鏈表排序
16、成績記錄簿(限最多2人完成)
編制一個C語言成績記錄簿,每個學生信息包括:學號、姓名、C語言成績。具體功能:
(1)創建信息鏈表並以磁碟文件保存;
考核方式課程設計完成情況; ?課程?設計報告; ?課程設計期間的表現.參考評定依據
?
課程設計成績評定的依據有設計文檔資料、具體實現設計方案的程序及課程設計考勤登記表,其中平時成績占總成績的20%。
優:按要求完成題目,有完整的符合標準的文檔,文檔有條理、文筆通順,格式正確,其中有總體設計思想的論述,有正確的流程圖,程序完全實現設計方案,設計方案先進,軟體可靠性好;
良:完成設計題目,有完整的符合標準的文檔,文檔有條理、文筆通順,格式正確;有完全實現設計方案的軟體,設計方案較先進;
中:基本完成題目,有完整的符合標準的文檔,有基本實現設計方案的軟體,設計方案正確;
及格:基本完成題目,有完整的符合標準的文檔,有基本實現設計方案的軟體,設計方案基本正確;
不及格:沒有完成題目的要求,沒有完整的符合標準的文檔,軟體沒有基本實現設計方案,設計方案不正確。 ?提交資料: ??課程設計報告 提交報告的內容?一、題目內容的描述 ?二、應用程序功能的詳細說明 ?三、輸入數據類型、格式和內容限制; ?四、主要模塊的演算法描述 –以程序流程圖的方式給出 –簡要的語言描述 ?五、結束語 ?六、程序的源代碼清單 ?
七、報告的字數,不算源代碼清單不少於4頁
?按規定的模板封面輸出,不準自定義封面格式
提交報告的格式?
正文宋體小四號字
每個自然段開始空兩格.
文中英文用新羅馬(time new roman),四號
源程序清單用英文新羅馬五號
正文宋體小四號字
每個自然段開始空兩格.
文中英文用新羅馬(time new roman),四號
源程序清單用英文新羅馬五號
提交報告封面
軟體:需提供源程序,並能正常運行。
註:對於程序中未能實現的部分需要加以說明。對於程序中所參考的部分代碼需要加以聲明,並說明出處。
10. 總體設計(程序設計組成框圖、流程圖
你好 我可以 .