找回密码
 注册
搜索
查看: 1121|回复: 28

C语言求助,在线等

[复制链接]
发表于 2007-11-30 21:12:09 | 显示全部楼层 |阅读模式
我哥帮我做了个课设,用的C++
可我想改为C的,遇到了个问题
/****************************************
* file name   : drugManager.cpp
* author      : Andrew
* last modify : 11/27/2007
***************************************/
#include<stdio.h>

const int N = 10;
struct drug
{
int    number;
char   kind;
float  price;
int    amount;
double totalPrice;
};
void _author(void);
void _mainMenu(drug *drugs);
void _initDrug(drug *drugs);
void _checkNumber(drug *drugs, const int &i);
void _locate(drug *drugs);
void _subLocate(drug *drugs);
void _update(drug *drugs);
void _subUpdate(drug *drugs);
void _insert(drug *drugs, int &N);
void _subInsert(drug *drugs, int &N);
void _delete(drug *drugs);
void _subDelete(drug *drugs);
void _statistMenu(drug *drugs);
void _viewPrice(drug *drugs);
void _sortMenu(drug *drugs);
void _upSort(drug *drugs);
void _downSort(drug *drugs);
void _exit(drug *drugs);

int main(int argc, char **argv)
{
_author();
drug *drugs = new drug[N];
_initDrug(drugs);
return (0);
}
void _author(void)
{
cout<<"My name is Song Zhenyuan"<<endl;
cout<<"My number is 123"<<endl;
cout<<"I am 19 years old. "<<endl<<endl;
}
//*************************************************************
void _mainMenu(drug *drugs)
{
system("cls");

cout<<"                   DRUG MANAGE SYSTEM                  "<<endl;
cout<<"                                                       "<<endl;
cout<<"1. Key in 'L' to locate the imformation by drug number."<<endl;
cout<<"2. Key in 'U' to update the imformation by drug number."<<endl;
cout<<"3. Key in 'D' to delete the imformation by drug number."<<endl;
cout<<"4. Key in 'S' to view the Statistic imformations.      "<<endl;
cout<<"5. Key in 'E' to exit the system."<<endl;
cout<<endl<<"Select one option you want:";
char choose = '\0'
int  aCase  = 0;
cin>>choose;
if (choose=='L' || choose=='l') aCase = 1;
if (choose=='U' || choose=='u') aCase = 2;
if (choose=='D' || choose=='d') aCase = 3;
if (choose=='S' || choose=='s') aCase = 4;
if (choose=='E' || choose=='e') aCase = 5;
switch (aCase)
{
case 1: _locate(drugs); break;
case 2: _update(drugs); break;
case 3: _delete(drugs); break;
case 4: _statistMenu(drugs); break;
case 5: _exit(drugs); break;
default: cout<<"The option can not find"<<endl;
   cout<<"lease put 'enter' key try again.";
   char c;
   cin.get(c);
   cin.get(c);
   if(c=='\n') _mainMenu(drugs);
   break;
}
}
//*************************************************************
void _initDrug(drug *drugs)
{
cout<<"lease enter the informations of drugs."<<endl;
cout<<"************************"<<endl;
for(int i=0; i<N; i++ )
{
  cout<<endl<<"lease enter the drugs of "<<i+1<<":"<<endl;
  _checkNumber(drugs, i);
  cout<<"choose the drug kind:"<<endl;
  char k = '\0'
  cout<<"enter C is Chinese traditional medicine"<<endl;
  cout<<"enter W is Western medicine"<<endl;
  cin>>k;
  if (k=='c' || k=='C') drugs.kind = 'C'
  if (k=='w' || k=='W') drugs.kind = 'W'
  cout<<"Drug price(yuan):";
  cin>>drugs.price;
  cout<<"Drug amount:";
  cin>>drugs.amount;
  drugs.totalPrice = drugs.price * drugs.amount;
  cout<<endl<<"************************"<<endl;
}
cout<<"INPUT COMPLETE"<<endl;
cout<<"lease put 'enter' key to goto main menu";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _mainMenu(drugs);
}
void _checkNumber(drug *drugs, const int &i)
{
cout<<"Drug number: ";
drugs.number = -1;

cin>>drugs.number;
for(int j=0; j<i; j++)
{
  if(drugs.number == drugs[j].number)
  {
  cout<<"Existing drug number, please enter again."<<endl;
  _checkNumber(drugs, i);
  }
}
}

//*************************************************************
void _locate(drug *drugs)
{
system("cls");
cout<<"             DRUG MANAGE SYSTEM LOCATE                 "<<endl;
cout<<"                                                       "<<endl;
cout<<"1. Key in 'L' to locate the imformation by drug number."<<endl;
cout<<"2. Key in 'R' to return the main menu.                 "<<endl;
cout<<endl<<"Select one option you want:";
char choose = '\0'
int  aCase  = 0;
cin>>choose;
if (choose=='L' || choose=='l') aCase = 1;
if (choose=='R' || choose=='r') aCase = 2;
switch (aCase)
{
case 1: _subLocate(drugs); break;
case 2: _mainMenu(drugs); break;
default: cout<<"The option can not find"<<endl;
   cout<<"lease put 'enter' key try again.";
   char c;
   cin.get(c);
   cin.get(c);
   if(c=='\n') _locate(drugs);
   break;
}
}
void _subLocate(drug *drugs)
{
system("cls");
cout<<"Existing drug numbers:"<<endl;
for (int i=0; i<N; i++)
{
  if (drugs.number!=-1)
  cout<<"drug number:"<<drugs.number<<endl;
}
cout<<endl;
int x;
cout<<"Choose the number which you want to see: ";
cin>>x;
for (i=0; i<N; i++)
{
  if (x==drugs.number)
  {
  if(drugs.kind = 'C')
   cout<<"The drug kind:"<<"Chinese traditional medicine"<<endl;
  else
   cout<<"The drug kind: "<<"Western medicine"<<endl;
  cout<<"Drug price: "<<drugs.price<<" yuan"<<endl;
  cout<<"Drug amount: "<<drugs.amount<<endl;
  cout<<"Drug total price: "<<drugs.totalPrice<<" yuan"<<endl;
 
  break;
  }
}

cout<<endl<<"lease put 'enter' key to goto main menu";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _mainMenu(drugs);
}
//*************************************************************
void _update(drug *drugs)
{
system("cls");
cout<<"             DRUG MANAGE SYSTEM UPDATE                 "<<endl;
cout<<"                                                       "<<endl;
cout<<"1. Key in 'U' to update the imformation by drug number."<<endl;
cout<<"2. Key in 'R' to return the main menu.                 "<<endl;
cout<<endl<<"Select one option you want:";
char choose = '\0'
int  aCase  = 0;
cin>>choose;
if (choose=='U' || choose=='u') aCase = 1;
if (choose=='R' || choose=='r') aCase = 2;
switch (aCase)
{
case 1: _subUpdate(drugs); break;
case 2: _mainMenu(drugs); break;
default: cout<<"The option can not find"<<endl;
   cout<<"lease put 'enter' key try again.";
   char c;
   cin.get(c);
   cin.get(c);
   if(c=='\n') _update(drugs);
   break;
}
}
void _subUpdate(drug *drugs)
{
system("cls");
cout<<"Existing drug numbers:"<<endl;
for (int i=0; i<N; i++)
{
  if (drugs.number!=-1)
  cout<<"drug number:"<<drugs.number<<endl;
}
cout<<endl;
int x;
cout<<"Choose the number which you want to change : ";
cin>>x;
for (i=0; i<N; i++)
{
  if (x==drugs.number)
  {
  cout<<"choose the drug kind:"<<endl;
  char k = '\0'
  cout<<"enter C is Chinese traditional medicine"<<endl;
  cout<<"enter W is Western medicine"<<endl;
  cin>>k;
  if (k=='c' || k=='C') drugs.kind = 'C'
  if (k=='w' || k=='W') drugs.kind = 'W'
  cout<<"Drug price:";
  cin>>drugs.price;
  cout<<"Drug amount:";
  cin>>drugs.amount;
  drugs.totalPrice = drugs.price * drugs.amount;
 
  break;
  }
}

cout<<"UPDATE SUCCEED"<<endl;
cout<<"lease put 'enter' key to goto main menu";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _mainMenu(drugs);
}
//*************************************************************
void _delete(drug *drugs)
{
system("cls");
cout<<"             DRUG MANAGE SYSTEM DELETE                 "<<endl;
cout<<"                                                       "<<endl;
cout<<"1. Key in 'D' to delete the imformation by drug number."<<endl;
cout<<"2. Key in 'R' to return the main menu."<<endl;
cout<<endl<<"Select one option you want:";
char choose = '\0'
int  aCase  = 0;
cin>>choose;
if (choose=='D' || choose=='d') aCase = 1;
if (choose=='R' || choose=='r') aCase = 2;
switch (aCase)
{
case 1: _subDelete(drugs); break;
case 2: _mainMenu(drugs); break;
default: cout<<"The option can not find"<<endl;
   cout<<"lease put 'enter' key try again.";
   char c;
   cin.get(c);
   cin.get(c);
   if(c=='\n') _delete(drugs);
   break;
}
}
void _subDelete(drug *drugs)
{
system("cls");
cout<<"Exit drug numbers:"<<endl;
for (int i=0; i<N; i++)
{
  if (drugs.number!=-1)
  cout<<"drug number:"<<drugs.number<<endl;
}
cout<<endl;
int x;
cout<<"Choose the number which you want to delete: ";
cin>>x;
for (i=0; i<N; i++)
{
  if (x==drugs.number)
  {
  drugs.number  = -1;
  drugs.kind  = '\0'
  drugs.price  = 0;
  drugs.amount  = 0;
  drugs.totalPrice = 0;
  break;
  }
}

cout<<"DELETE SUCCEED"<<endl;
cout<<"lease put 'enter' key to goto main menu";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _mainMenu(drugs);
}
//*************************************************************
void _statistMenu(drug *drugs)
{
system("cls");
cout<<"              DRUG STATIST MENU                  "<<endl;
cout<<"                                                 "<<endl;
cout<<"1. Key in 'P' to view the statist price of drugs."<<endl;
cout<<"2. Key in 'S' to sort the drugs by unit price.   "<<endl;
cout<<"3. Key in 'R' to return the main menu."<<endl;
cout<<endl<<"Select one option you want:";
char choose = '\0'
int  aCase  = 0;
cin>>choose;
if (choose=='P' || choose=='p') aCase = 1;
if (choose=='S' || choose=='s') aCase = 2;
if (choose=='R' || choose=='r') aCase = 3;
switch (aCase)
{
case 1: _viewPrice(drugs); break;
case 2: _sortMenu(drugs); break;
case 3: _mainMenu(drugs); break;
default: cout<<"The option can not find"<<endl;
   cout<<"lease put 'enter' key try again.";
   char c;
   cin.get(c);
   cin.get(c);
   if(c=='\n') _statistMenu(drugs);
   break;
}
}
void _viewPrice(drug *drugs)
{
system("cls");
cout<<"              DRUG STATIST VIEW                  "<<endl;
cout<<"                                                 "<<endl;
double tPrice  = 0;
double cTotalPrice = 0;
double wTotalPrice = 0;
for (int i=0; i<N; i++)
{
  if (drugs.number != -1 && drugs.kind == 'C')
  {
  cTotalPrice += drugs.totalPrice;
  }
  if (drugs.number != -1 && drugs.kind == 'W')
  {
  wTotalPrice += drugs.totalPrice;
  }
}
tPrice = cTotalPrice + wTotalPrice;
cout<<"The price of total drugs is "<<tPrice<<" yuan"<<endl;
cout<<"The price of Chinese drugs is "<<cTotalPrice<<" yuan"<<endl;
cout<<"The price of Westen drugs is "<<wTotalPrice<<" yuan"<<endl;
cout<<endl;
cout<<endl<<"lease put 'enter' key to goto statist menu.";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _statistMenu(drugs);
}
void _sortMenu(drug *drugs)
{
system("cls");
cout<<"                  DRUG UNIT PRICE SORT                      "<<endl;
cout<<"                                                            "<<endl;
cout<<"1. Key in 'E' to sort the drug unit from expensive to cheap."<<endl;
cout<<"2. Key in 'C' to sort the drug unit from cheap to expensive."<<endl;
cout<<"3. Key in 'R' to return the statist menu.                   "<<endl;
cout<<endl<<"Select one option you want:";
char choose = '\0'
int  aCase  = 0;
cin>>choose;
if (choose=='E' || choose=='e') aCase = 1;
if (choose=='C' || choose=='c') aCase = 2;
if (choose=='R' || choose=='r') aCase = 3;
switch (aCase)
{
case 1: _upSort(drugs); break;
case 2: _downSort(drugs); break;
case 3: _statistMenu(drugs); break;
default: cout<<"The option can not find"<<endl;
   cout<<"lease put 'enter' key try again.";
   char c;
   cin.get(c);
   cin.get(c);
   if(c=='\n') _sortMenu(drugs);
   break;
}
}
void _downSort(drug *drugs)
{
system("cls");
int num = 0;
drug temp;
for (int i=0; i<N; i++)
{
  if (drugs.number != -1) num += 1;
}
for (int j=0; j<num-1; j++)
{
  for (i=0; i<num-1-j; i++)
  {
  if (drugs.price>drugs[i+1].price)
  {
   temp = drugs;
   drugs = drugs[i+1];
   drugs[i+1] = temp;
  }
  }
}
cout<<"The drug unit from expensive to cheap."<<endl;
for (i=0; i<N; i++)
{
  if(drugs.number != -1)
  cout<<i+1<<". The drug number: "<<drugs.number<<endl;
}
cout<<endl;
cout<<"lease put 'enter' key to return sort menu.";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _sortMenu(drugs);

}
void _upSort(drug *drugs)
{
system("cls");
int num = 0;
drug temp;
for (int i=0; i<N; i++)
{
  if (drugs.number != -1) num += 1;
}
for (int j=0; j<num-1; j++)
{
  for (i=0; i<num-1-j; i++)
  {
  if (drugs.price<drugs[i+1].price)
  {
   temp = drugs;
   drugs = drugs[i+1];
   drugs[i+1] = temp;
  }
  }
}
cout<<"The drug unit from cheap to expensive."<<endl;
for (i=0; i<N; i++)
{
  if(drugs.number != -1)
  cout<<i+1<<". The drug number: "<<drugs.number<<endl;
}
cout<<endl;
cout<<"lease put 'enter' key to return sort menu.";
char c;
cin.get(c);
cin.get(c);
if(c=='\n') _sortMenu(drugs);
}
//*************************************************************
void _exit(drug *drugs)
{
delete []drugs;
cout<<endl<<"Thanks for using this system. "<<endl;
cout<<"Copyright by Andrew 2007."<<endl<<endl;
}
//*************************************************************







void _mainMenu(drug *drugs);
void _initDrug(drug *drugs);
void _checkNumber(drug *drugs, const int &i);
void _locate(drug *drugs);
void _subLocate(drug *drugs);
void _update(drug *drugs);
void _subUpdate(drug *drugs);
void _insert(drug *drugs, int &N);
void _subInsert(drug *drugs, int &N);
void _delete(drug *drugs);
void _subDelete(drug *drugs);
void _statistMenu(drug *drugs);
void _viewPrice(drug *drugs);
void _sortMenu(drug *drugs);
void _upSort(drug *drugs);
void _downSort(drug *drugs);
void _exit(drug *drugs);
这些都提示语法错误,这是为什么啊
发表于 2007-11-30 21:17:50 | 显示全部楼层
把错误信息发上来

而且C语言的控制台输入输出要用 printf() scanf()的吧  用cout cin 的都不行吧
回复 赞 踩

使用道具 举报

发表于 2007-11-30 21:46:17 | 显示全部楼层
用VS2005编译了一下  果不其然 是C语言中不支持的C++语言特性 引起的错误   69个的说
回复 赞 踩

使用道具 举报

 楼主| 发表于 2007-12-1 17:02:06 | 显示全部楼层
恩,好象指针那有错误
回复 赞 踩

使用道具 举报

发表于 2007-12-1 22:15:06 | 显示全部楼层
看不懂,没想到楼主还这么有文化,没想到,没想到。。
回复 赞 踩

使用道具 举报

发表于 2007-12-1 22:26:50 | 显示全部楼层
英语专业路过
回复 赞 踩

使用道具 举报

发表于 2007-12-1 23:18:00 | 显示全部楼层
LZ的程序让我很有挫败感,实在看不出指针哪用错了,但就是有错误。也试了通过只改变接口来让程序通过,失败。按照LZ程序中指针的使用方法写了个验证指针机制的小程序,却又没有错。   败了败了。叫你哥帮你搞定还实际些。
回复 赞 踩

使用道具 举报

发表于 2007-12-1 23:25:36 | 显示全部楼层
软件专业但是只学到C还米学C++的路过...
回复 赞 踩

使用道具 举报

发表于 2007-12-1 23:31:53 | 显示全部楼层
LS哪的软件专业?

我们就学了C++。根据我所知道的范围,C和C++差距不大。
回复 赞 踩

使用道具 举报

发表于 2007-12-1 23:51:32 | 显示全部楼层
BJUT的数字媒体技术,和LZ是一个学校的~
回复 赞 踩

使用道具 举报

发表于 2007-12-2 08:24:56 | 显示全部楼层
[quote=Cloudia;442736]软件专业但是只学到C还米学C++的路过...[/quote]
这是什么逻辑,C的难度比C++高啊~靠
回复 赞 踩

使用道具 举报

发表于 2007-12-2 09:16:41 | 显示全部楼层
[quote=aurthconan;442616]把错误信息发上来

而且C语言的控制台输入输出要用 printf() scanf()的吧 用cout cin 的都不行吧[/quote]
除此之外
诸如drug *drugs前面要加struct
所以要写成struct drug *drugs

我不懂为什么你要写成
int &i 或 int &N
int i 或 int N 不就好了

还有
struct drug temp;
我没仔细看你在哪里用它,反正这样子定义等这个function一结束,temp就从内存了消失了。
要保留它要用
struct drug* temp = malloc(sizeof(struct drug));
再程序结束前要用
free(void*);
清空该内存,否则有memory leak,不过你们老师应该不会要求你处理memory leak,所以也可以无视。

回复 赞 踩

使用道具 举报

发表于 2007-12-2 19:21:41 | 显示全部楼层
我最讨厌看别人的代码了,尤其是没注释的.
回复 赞 踩

使用道具 举报

 楼主| 发表于 2007-12-2 20:52:56 | 显示全部楼层
不是,就是那些声明,总没用不知道为什么TC就是运行不了
回复 赞 踩

使用道具 举报

 楼主| 发表于 2007-12-2 20:58:31 | 显示全部楼层
设计一个药品管理程序,具有下列功能:
输入药品信息:药品号、药品名、类别(西药、中成药)、单价、数量、价格等信息,共10个;
给定药品号,查找药品信息;
给定药品号,修改药品信息;
给定药品号,删除药品信息;
统计
总药品价值
分别统计西药和中成药的总价值
按照药品的单价升序或者降序排列药品信息
加分功能

就是这个课程设计,谁有空就帮我下吧,后天就交了
回复 赞 踩

使用道具 举报

发表于 2007-12-3 09:41:21 | 显示全部楼层
那偶就没时间了。。。如果5号以后交还好说。。。
偶在写操作系统,5号要交。。。
回复 赞 踩

使用道具 举报

发表于 2007-12-3 13:05:13 | 显示全部楼层
明天就要么?今天偶还要做FLASH作业和艺术设计作业=.=!
看那些功能貌似做出来还是很简单的,不过要偶做的话可能和LZ思路不太一样,而且偶不喜欢用void而是喜欢直接用数组编在main里...(水平太差木有办法啊...)还有加分功能是虾米啊?
回复 赞 踩

使用道具 举报

 楼主| 发表于 2007-12-3 17:52:16 | 显示全部楼层
就是额外加分的界面美化,如果能做的吧,就帮我看看帖这里吧,明天就要检查了,大概做下就行
回复 赞 踩

使用道具 举报

发表于 2007-12-5 10:57:30 | 显示全部楼层
[quote=WeiZ;442789]除此之外
诸如drug *drugs前面要加struct
所以要写成struct drug *drugs

我不懂为什么你要写成
int &i 或 int &N
int i 或 int N 不就好了

还有
struct drug temp;
我没仔细看你在哪里用它,反正这样子定义等这个function一结束,temp就从内存了消失了。
要保留它要用
struct drug* temp = malloc(sizeof(struct drug));
再程序结束前要用
free(void*);
清空该内存,否则有memory leak,不过你们老师应该不会要求你处理memory leak,所以也可以无视。

[/quote]

哦 原来如此  还有这些差别
就学了C++,没正经学过C语言,对C语言没研究。


PS:我们学校太扯了,大三上期学C#,下期学JAVA
PPS :CQU的
回复 赞 踩

使用道具 举报

发表于 2007-12-5 13:34:21 | 显示全部楼层
[quote=aurthconan;443169]哦 原来如此 还有这些差别
就学了C++,没正经学过C语言,对C语言没研究。


PS:我们学校太扯了,大三上期学C#,下期学JAVA
PPS :CQU的[/quote]
我是VT的,C的确很牛X,第一次写C程序的时候发现原来C没有Class也能写出Double Linked List这种东西。当时觉得思路太神奇了。
C#这学期选修了一下,真TMD好玩,感觉像用星际魔兽战役编辑器
C是高手用的东西,但现在找工作一般是个C++达人就够了。
回复 赞 踩

使用道具 举报

发表于 2007-12-5 17:53:44 | 显示全部楼层
C是高手用的东西!
看来你对语言的认识还是不深。
回复 赞 踩

使用道具 举报

发表于 2007-12-6 00:01:51 | 显示全部楼层
[quote=argstormsky;443210]C是高手用的东西!
看来你对语言的认识还是不深。[/quote]

修正:偶刚才错把感叹号看成问号,似乎argstormsky同学是同意的意思?
回复 赞 踩

使用道具 举报

发表于 2007-12-6 08:56:06 | 显示全部楼层
C是高手用的东西?那为虾米偶们大一上来就学C?8过偶还米学C++,木有什么发言权......听说C++能实现很多C难以实现的东西...
回复 赞 踩

使用道具 举报

发表于 2007-12-6 14:14:12 | 显示全部楼层
C++是一种糟糕的语言 Linux之父炮轰C++

http://dev.yesky.com/198/7542198.shtml
回复 赞 踩

使用道具 举报

发表于 2007-12-6 16:38:09 | 显示全部楼层
他这样说那还不如用汇编写,代码效率最高,垃圾最少。
不知W同学有没有学过汇编,我这学期接触了之后,觉得一些题目用汇编其实思路可以十分简单,但要实现起来就很繁杂,用原本的汇编指令甚至有些题目是无从下手。宏汇编和debug汇编的区别就是加了几条可以被编译器识别的伪指令,但思路的实现简单多了。我觉得c++和c也是这种关系,从更宏观角度来写程序优点很多,尤其是在对微观了解深入后再从宏观考虑那种豁然开朗的感觉很爽。
当然代码的高效性也很重作系统,尤其是操作系统,但我认为程序的简单易行性才是我们更改关注的,毕竟我们不是dijkstra和Knuth那样的计算机科学家。
语言其实很难比较什么,在机器里都要转化成机器码。
以上只是我个人的拙见而已,我是网络的,没自己写过什么复杂的东西,就是最近一直在想这方面的问题。
回复 赞 踩

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|MGCN谍海游龙

GMT+8, 2026-11-14 18:15 , Processed in 0.041779 second(s), 5 queries , Redis On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表