当前位置:首页 » 编程语言 » c语言管理问题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言管理问题

发布时间: 2022-04-12 00:33:45

Ⅰ 关于c语言 图书管理系统的一些问题

修改了不少地方,自己测试一下吧。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
int count=0;
struct BOOK
{
int id;//id为书号
int total;//total为总数
int store;//store为现库存数
int user[10];//user数组表示借阅者名字
int days[10];//days表示借阅天数
char name[31],author[21]; //分别用于存放书名,及其作者
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。*/

void page_title(char *menu_item)
{
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆图★书★管★理★系★统◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n",menu_item);
}
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/

void return_confirm(void)
{
printf("\n按任意键返回……\n");
getch();
}
/*上面是返回前请求确认的函数,以便在返回前观察结果*/

int search_book(void)
{
int n,i;
printf("请输入图书ID:");
scanf("%d",&i);
/*因为count已记录实际的图书数,循环的终止条件应该是n<count吧*/
for(n=0;n<count;n++)
{
if(books[n].id==i)
{
printf("书名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存数:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n输入错误或无效图书ID.\n");
return -1;
}
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。*/

void book_out(void)
{
int n,s,l,d;
if((n=search_book())!=-1&&books[n].store>0)
{
printf("请输入借书证序号:");
scanf("%d",&s);
printf("请输入可借天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].user[l]==0)
{
books[n].user[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n");
return_confirm();
}
/*上面是借书的函数,首先调用找书函数*/

void book_return(void)
{
int n,s,l;
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借阅者图书证列表:\n");
for(l=0;l<10;l++)
if (books[n].user[l]!=0)
printf("[%d] - %d天\n",books[n].user[l],books[n].days[l]);
printf("请输入借书证序号:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].user[l]==s)
{
books[n].user[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}
/*这个函数需要注意*/
void book_add(void)
{
int n,i,id;
n = 0;

while (n < 100)
{
printf("ID:");
scanf("%d",&id);

if(id==0) break;

while (books[n].id != 0) n++;

if (n >= 100) break;

books[n].id = id;

for(i=0; i<n; i++)
{
if(books[i].id==books[n].id)
{
printf("提示:此ID已经存在,请重新输入!\n");
printf("ID:");
scanf("%d", &books[n].id);
i=-1;
continue;
}
}

printf("书名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("数量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
count++;
n++;
}
return_confirm();
}
void book_view()
{
int n;
printf("|书号 \t| 书名 \t|作者\t|库存 \t|\n");
/* 这里循环的终止条件改为n<count*/
for(n=0;n<count;n++)
{
if (books[n].id!=0)
printf("|%d \t| %s \t|%s\t|%d of %d\t\t|\n",
books[n].id,books[n].name,books[n].author,books[n].store,books[n].total);
}
return_confirm();
}

/*以上是浏览全部藏书的基本信息*/
void book_del(void)
{
int n;
if((n=search_book())!=-1) memset(&books[n], 0, sizeof(BOOK));
/*books[n]=books[count];*/
printf("该书已注销.\n");
return_confirm();
count--;
}

int main(void)
{
memset(books, 0, sizeof(struct BOOK) * 100);
menu: page_title("操作选单");
printf("\t\t\t 1 借阅图书\t2 归还图书\n\n");
printf("\t\t\t 3 注册新书\t4 注销旧书\n\n");
printf("\t\t\t 5 浏览藏书\t0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_return();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '5' : book_view();break;
case '0' : exit(0);
}
goto menu;

return 0;
}

Ⅱ c语言中学生成绩管理的问题

#include
#include
#include
struct STUDENT{
float score[3];
long id;
char names[20];
};
typedef struct STUDENT student;//simplify the struct STUDENT
typedef struct STUDENT *Pstudent;

void print();
void append();
void course_total();
void student_total();
void score_sort(int (*compare)(float a,float b));
void number_sort();
void name_sort(Pstudent names_[30]);
void number_search();
void name_search();
void statistic(Pstudent scores_[30]);

void show(int i);

int ascend(float a, float b){
if(a>b) return 1;
else return 0;
}
int descend(float a, float b){
if(a<b) return 1;
else return 0;
}
int n;//the number of students

int flg=1;//true print the result
student *stuArray[30];//the global variable can simplify the compute

int again=1;//whether to continue
int main(){
int i;
printf("Input student number(n<30):");
scanf("%d",&n);
int choice;
while(again){
print();
scanf("%d",&choice);
switch(choice){
case 1:
append();
break;
case 2:
course_total();//use flag to define whether to print
break;
case 3:
student_total();
break;
case 4:
score_sort(descend);
if(flg){
printf("Sort in descending order by total score of every student:\n");
printf("NO\tName\tMT\tEN\tPH\tSUM\tAVER\n");
for(i=0;i<n;i++)
show(i);
}
break;
case 5:
score_sort(descend);
if(flg){
printf("Sort in ascending order by total score of every student:\n");
printf("NO\tName\tMT\tEN\tPH\tSUM\tAVER\n");
for(i=0;i<n;i++)
show(n-1-i);
}
break;
case 6:
number_sort();
break;
case 7:
name_sort(stuArray);
break;
case 8:
number_search();
break;
case 9:
name_search();
break;
case 10:
statistic(stuArray);
break;
case 0:
again=0;
printf("End of program!\n");
break;
default:
printf("Input error!\n");
break;
}

}
return 0;
}

void print(){
printf("1.Append record\n");
printf("2.Calculate total and average score of every course\n");
printf("3.Calculate total and average score of every student\n");
printf("4.Sort in descending order by total score of every student\n");
printf("5.Sort in ascending order by total score of every student\n");
printf("6.Sort in ascending order by number\n");
printf("7.Sort in dictionary order by name\n");
printf("8.Search by number\n");
printf("9.Search by name\n");
printf("10.Statistic analysis\n");
printf("Please Input your choice:");
}
void append(){
int i;
printf("Input student's ID,name and score:\n");
for(i=0;i<n;i++){////the most significant part malloc the memory when appending record
stuArray[i] = (student *)malloc(sizeof(student));
scanf("%ld%s",&stuArray[i]->id,stuArray[i]->names);
scanf("%f",&stuArray[i]->score[0]);
scanf("%f",&stuArray[i]->score[1]);
scanf("%f",&stuArray[i]->score[2]);
}
}
void course_total(){
int i;
float sum0=0.0,sum1=0.0,sum2=0.0;
for(i=0;i<n;i++){
sum0+=stuArray[i]->score[0];
sum1+=stuArray[i]->score[1];
sum2+=stuArray[i]->score[2];
}
if(flg){
printf("course %d:sum=%.0f,aver=%.0f\n",1,sum0,sum0/n);
printf("course %d:sum=%.0f,aver=%.0f\n",2,sum1,sum1/n);
printf("course %d:sum=%.0f,aver=%.0f\n",3,sum2,sum2/n);
}
}
void student_total(){
float total[30]={0.0};
int i;
for(i=0;i<n;i++){
total[i]=stuArray[i]->score[0]+stuArray[i]->score[1]+stuArray[i]->score[2];
}
if(flg){
for(i=0;i<n;i++)
printf("student %d:sum=%.0f,aver=%.0f\n",i+1,total[i],total[i]/3);
}
}
void score_sort(int (*compare)(float a,float b)){
int i,j;
float total[30]={0.0};
for(i=0;i<n;i++){
total[i]=stuArray[i]->score[0]+stuArray[i]->score[1]+stuArray[i]->score[2];
}
for(i=0;i<n;i++){
for(j=0;j<=i;j++)
//if((*compare)(stuArray[i]->score[0]+stuArray[i]->score[1]+stuArray[i]->score[2],stuArray[j]->score[0]+stuArray[j]->score[1]+stuArray[j]->score[2])==0){
if((*compare)(total[i],total[j])==0){//just swap the pointer it simplify the program
student *tmp=(student *)malloc(sizeof(student));
memcpy(tmp,stuArray[i],sizeof(student));
memcpy(stuArray[i],stuArray[j],sizeof(student));
memcpy(stuArray[j],tmp,sizeof(student));
}//memcpy-> the hole the memory
}

}
void number_sort(){//没必要传参
int i,j;
for(i=0;i<n;i++){
for(j=0;j<i;j++)
if(stuArray[i]->idid){
student *tmp=(student *)malloc(sizeof(student));
memcpy(tmp,stuArray[i],sizeof(student));
memcpy(stuArray[i],stuArray[j],sizeof(student));
memcpy(stuArray[j],tmp,sizeof(student));
}
}
if(flg){
printf("Sort in ascending order by number:\n");
printf("NO\tName\tMT\tEN\tPH\tSUM\tAVER\n");
for(i=0;i<n;i++)
show(i);
}
}
void name_sort(Pstudent names_[30]){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<=i;j++)
if(strcmp(names_[i]->names,names_[j]->names)<0){
student *tmp=(student *)malloc(sizeof(student));
memcpy(tmp,stuArray[i],sizeof(student));
memcpy(stuArray[i],stuArray[j],sizeof(student));
memcpy(stuArray[j],tmp,sizeof(student));
}
}
if(flg){
printf("Sort in dictionary order by name:\n");
printf("NO\tName\tMT\tEN\tPH\tSUM\tAVER\n");
for(i=0;i<n;i++)
show(i);
}
}
void number_search(){
long query;
printf("Input the number you want to search:");
scanf(" %ld",&query);
int i;
score_sort(descend);//100 98 87
for(i=0;i<n;i++){
if(stuArray[i]->id==query)
break;
}
if(i!=n){
printf("%d\t",i+1);
show(i);
}
else
printf("Not found!\n");
}
void name_search(){
char query[20];
score_sort(descend);
printf("Input the name you want to search:");
scanf("%s",query);
int i;
for(i=0;i<n;i++){
if(!strcmp(query,stuArray[i]->names)){
break;
}
}
if(i!=n){
printf("%d\t",i+1);
show(i);
}
else
printf("Not found!\n");
}
void statistic(Pstudent scores_[30]){//a pointer array stands for scores
float MT[30],EN[30],PH[30];
int i;
for(i=0;i<n;i++){
MT[i]=scores_[i]->score[0];
EN[i]=scores_[i]->score[1];
PH[i]=scores_[i]->score[2];
}
int sta[6]={0};//means the statistic of every student (<60 or 60-70 ....)
for(i=0;i<n;i++){
if(MT[i]<60)
sta[0]++;
if(MT[i]==100)
sta[5]++;
if(MT[i]>=60&&MT[i]<=69)
sta[1]++;
if(MT[i]>=70&&MT[i]<=79)
sta[2]++;
if(MT[i]>=80&&MT[i]<=89)
sta[3]++;
if(MT[i]>=90&&MT[i]<=100)
sta[4]++;
}

if(flg){
printf("For course %d:\n",1);
printf("<60\t%d\t%.2f%%\n",sta[0],sta[0]/(float)n*100);//change n to float
printf("60-69\t%d\t%.2f%%\n",sta[1],sta[1]/(float)n*100);
printf("70-79\t%d\t%.2f%%\n",sta[2],sta[2]/(float)n*100);
printf("80-89\t%d\t%.2f%%\n",sta[3],sta[3]/(float)n*100);
printf("90-100\t%d\t%.2f%%\n",sta[4],sta[4]/(float)n*100);
printf("100\t%d\t%.2f%%\n",sta[5],sta[5]/(float)n*100);
}
memset(sta,0,6*sizeof(int));//initialize the sta array
for(i=0;i<n;i++){
if(EN[i]<60)
sta[0]++;
if(EN[i]==100)
sta[5]++;
if(EN[i]>=60&&EN[i]<=69)
sta[1]++;
if(EN[i]>=70&&EN[i]<=79)
sta[2]++;
if(EN[i]>=80&&EN[i]<=89)
sta[3]++;
if(EN[i]>=90&&EN[i]<=100)
sta[4]++;
}

if(flg){
printf("For course %d:\n",2);
printf("<60\t%d\t%.2f%%\n",sta[0],sta[0]/(float)n*100);//change n to float
printf("60-69\t%d\t%.2f%%\n",sta[1],sta[1]/(float)n*100);
printf("70-79\t%d\t%.2f%%\n",sta[2],sta[2]/(float)n*100);
printf("80-89\t%d\t%.2f%%\n",sta[3],sta[3]/(float)n*100);
printf("90-100\t%d\t%.2f%%\n",sta[4],sta[4]/(float)n*100);
printf("100\t%d\t%.2f%%\n",sta[5],sta[5]/(float)n*100);
}
memset(sta,0,6*sizeof(int));
for(i=0;i<n;i++){
if(PH[i]<60)
sta[0]++;
if(PH[i]==100)
sta[5]++;
if(PH[i]>=60&&PH[i]<=69)
sta[1]++;
if(PH[i]>=70&&PH[i]<=79)
sta[2]++;
if(PH[i]>=80&&PH[i]<=89)
sta[3]++;
if(PH[i]>=90&&PH[i]<=100)
sta[4]++;
}

if(flg){
printf("For course %d:\n",3);
printf("<60\t%d\t%.2f%%\n",sta[0],sta[0]/(float)n*100);//change n to float
printf("60-69\t%d\t%.2f%%\n",sta[1],sta[1]/(float)n*100);
printf("70-79\t%d\t%.2f%%\n",sta[2],sta[2]/(float)n*100);
printf("80-89\t%d\t%.2f%%\n",sta[3],sta[3]/(float)n*100);
printf("90-100\t%d\t%.2f%%\n",sta[4],sta[4]/(float)n*100);
printf("100\t%d\t%.2f%%\n",sta[5],sta[5]/(float)n*100);
}
}

void show(int i){

printf("%ld\t%s\t",stuArray[i]->id,stuArray[i]->names);//order is the id after sort
printf("%.0f\t%.0f\t%.0f\t",stuArray[i]->score[0],stuArray[i]->score[1],stuArray[i]->score[2]);
float sum=stuArray[i]->score[0]+stuArray[i]->score[1]+stuArray[i]->score[2];
printf("%.0f\t%.0f\n",sum,sum/3);
}

Ⅲ C语言停车场管理问题

细节上的优化就看Lz怎么想了,我觉得提示做得还不够好,免强能用了。
#include
#include
#define N 3 /*停车场大小*/
#define MAX 50 /*过道大小*/
#define sign 10/*车牌大小*/
#define price 10/*每分钟的价钱*/
char part[N][sign];
char Rpart[MAX][sign];
char time[N][20];
int P,R;
partadd(char *t)
{
strcpy(&part[P][0],t);
printf("请输入时间:例如十点十分格式为“10.10”\n");
scanf("%s",&time[P][0]);
getchar();
P++;
}
Rpartadd(char *t)
{
if(R<MAX)
{
strcpy(&Rpart[R][0],t);
R++;
}
else
{
printf("过道己满。无法停车。\n");
}
}
newcar()
{
char temp[sign];
printf("请输入车牌号:");
scanf("%s",temp);
getchar();
if(P<N)
{
partadd(temp);
}
else if(R<MAX)
{
Rpartadd(temp);
}
}
int timed(char *t1,char *t2)
{
int i=0,y=0,x=0,j,n=1;
while(1)
{
if(t1[i]=='.')
{
for(j=i-1;j>=0;j--)
{
y=y+(t1[j]-'0')*(60*n);
n=n*10;
}
while(1)
{
if(t1[j]==NULL)
{
for(n=1;j>i;j--)
{
y=y+(t1[j]-'0')*n;
n=n*10;
}
break;
}
j++;
}
i=0;
while(1)
{
if(t2[i]=='.')
{
for(j=i-1;j>=0;j--)
{
x=x+(t2[j]-'0')*(60*n);
n=n*10;
}
while(1)
{
if(t2[j]==NULL)
{
for(n=1;j>i;j--)
{
x=x+(t2[j]-'0')*n;
n=n*10;
}
break;
}
j++;
}
y=(x-y)*price;
return y;
}
i++;
}
}
i++;
}
}
partcarout(int i)
{
int j,money;
char t[20];
printf("请输入现在的时间:例如十点十分格式为“10.10”\n");
scanf("%s",t);
getchar();
money=timed(t,&time[i][0]);
printf("收费%d\n",money);
for(j=i;j<P;j++)
{
strcpy(&part[j][0],&part[j+1][0]);
P--;
}
if(R!=0)
{
strcpy(&part[N-1][0],&Rpart[0][0]);
P++;
strcpy(&time[P][0],t);
Rpartcarout(0);
}
}
Rpartcarout(int i)
{
int j;
for(j=i;j<R;j++)
{
strcpy(&Rpart[j][0],&Rpart[j+1][0]);
R--;
}
}
carout()
{
char t[sign];
int i,get=0;
printf("请入要离开的车牌号:");
scanf("%s",t);
getchar();
for(i=0;i<P;i++)
{
if(strcmp(t,&part[i][0])==0)
{
get=1;
partcarout(i);
break;
}
}
for(i=0;i<R&&get==0;i++)
{
if(strcmp(t,&Rpart[i][0])==0)
{
get=1;
Rpartcarout(i);
break;
}
}
if(get==0)
{
printf("查无此车。\n");
}
}
jopart()
{
int i;
for(i=0;i<P;i++)
{
printf("%d.%s\n",i,&part[i][0]);
}
}
joRpart()
{
int i;
for(i=0;i<R;i++)
{
printf("%d.%s\n",i,&Rpart[i][0]);
}
}
main()
{
int c;
while(1)
{
printf("请选择要做的事:\n");
printf("1.加入新车。\n");
printf("2.有车离开。\n");
printf("3.显示在停车场内的车。\n");
printf("4.显示在过道上的车。\n");
printf("5.退出。\n");
c=getchar();
getchar();
switch (c)
{
case '1':newcar();
break;
case '2':carout();
break;
case '3':jopart();
break;
case '4':joRpart();
break;
case '5':exit(1);
break;
}
}
}

Ⅳ C语言学生管理系统问题

1、排序的细节肯定有问题,检查排序是否写对了
2、可能是对链表理解不透,链表写错(应该是判断条件写错了)
3、用文件保存信息,重新登录时从文件中重新读入数据,否则程序一关闭,内存就释放,数据就没有了

Ⅳ C语言,内存管理问题!

一样大。
name是char指针类型,它只记录地址,不记录地址里面存的东西
所以不管存多少东西,地址的长度是不会变的。
这个sizeof struct mm的长度目测是8(在32位程序里)

Ⅵ C语言学生信息管理系统中出现的问题

这是你自己写的程序吗?我很少使用这个类型,不太了解它的方法,要是源文件还是可以看看。下面是简单的分析。
FILE的用法学习了吗?
fwrite (&n,sizeof (int),1,fp2);//想文件中写入1个int的0啊?不是要删除吗?
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

Ⅶ C语言中,关于文件管理和记录的一些问题

char fileDir[30]; // 定义一个字符数组,用于后面保存目录路径
strcpy(fileDir,".."); // 将字符串".."拷贝到数组fileDir中
_chdir(fileDir); // 自定义函数调用,参数为fileDir,而fileDir的内容就是上一句拷贝进来的字符串

".."在路径中表示当前工作目录的上一级目录,比如我们当前在C:\Windows\system32\目录下,那么".."表示的就是C:\Windows\这个目录。

_chdir这个应该是一个自定义函数,猜测,其大致功能应该实现的是“Change Directory”,即改变当前工作目录

总的来看,如果猜测正确,那这三行代码的意思就是返回上一层目录的意思

Ⅷ 关于C语言中函数调用时内存管理方面的问题。

一般情况下C里能造成你这种效果的唯一可能就是 malloc之类申请的内存没用free之类释放。非一般情况指你用更底层的方法(比如Windows得HeapAlloc之类)申请内存来着

----

生化的基本原理我倒是还懂的,并且我坚信就算小学没上过自然课的程序员也能看出来你的问题出在哪儿|||

Ⅸ C语言程序学生系统管理,主要提问什么问题

1、输入学生信息(姓名、学号、成绩,可能还会有备注等额外信息,但是算法是一样的)

2、学生成绩进行排列,规则自定

3、查找任意条件的学生或是成绩

以上是我根据我们所做的题目回答的,供楼主参考。不过转来转去都是考核那么几个算法。

Ⅹ C语言 商品管理问题,要用纯 C语言中的文件

#include <stdio.h>
#include <string.h>
struct commodity
{
char name[20]; /*商品名*/
int id; /*商品ID*/
int count; /*数量*/
double price; /*价格*/
};

int main()
{
int n;
int i;
FILE *fp;
struct commodity data;
char *filename= "c:\\commodity.dat";
printf("请输入记录数量(整数:0-100)\n");
scanf("%d",&n);
if(n<0 || n>=100)
{
printf("Err:输入记录数量有误!");
return -1;
}
if(n==0)/*建立一个新文件*/
{
fp=fopen(filename,"w+b");
if(NULL==fp)
{
printf("文件初始化有误!");
return -2;
}
memset(&data,0,sizeof(data));
for(i=0;i<100;i++)
fwrite(&data,sizeof(data),1,fp);
printf("文件初始化成功");
}
else /*更新文件*/
{
fp=fopen(filename,"r+b");
if(NULL==fp)
{
printf("文件不存在");
return -3;
}
printf("开始更新文件记录%d!\n",n);
fseek(fp,(n-1)*sizeof(data),SEEK_SET); /*定位到记录位置*/
fwrite(&data,sizeof(data),1,fp); /*写一条记录到文件*/
printf("更新文件成功!\n");

/*输出*/
fseek(fp,0,SEEK_SET); /*定位到记录开头*/
for(i=0;i<100;i++)
{
fread(&data,sizeof(data),1,fp);
/*打印记录*/
printf("记录:%d\n",i+1);
printf("商品名:%s\n",data.name);
printf("商品ID:%d\n",data.id);
printf("数量:%d\n",data.count);
printf("价格:%f\n\n",data.price);
}

}

fclose(fp); /*关闭文件*/

return 0;
}

以上代码是操作文件,进行初始化与更新的方法。
对于记录的输入,你可以自己写个函数,具体的内容你可以根据实际情况,添加。