当前位置:文档之家› rt_thread 的定时器管理源码分析

rt_thread 的定时器管理源码分析

rt_thread 的定时器管理源码分析
rt_thread 的定时器管理源码分析

1 前言

rt-thread可以采用软件定时器或硬件定时器来实现定时器管理的,所谓软件定时器是指由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。而硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。软件定时器的精度取决于它使用的硬件定时器精度。而rt-thread 操作系统在默认情况下是采用的硬件定时器的方式,用户可以通过修改宏定义#ifdef

RT_USING_TIMER_SOFT来修改采用哪种。

2 rt-thread的定时器的基本工作原理

在RT-Thread定时器模块维护两个重要的全局变量,一个是当前系统的时间rt_tick(当硬件定时器中断来临时,它将加1),另一个是定时器链表rt_timer_list,系统中新创建的定时期都会被以排序的方式插入到rt_timer_list(硬件定时器模式下使用)链表中,rt_timer_list的每个节点保留了一个定时器的信息,并且在这个节点加入链表时就计算好了产生时间到达时的时间点,即tick,在rt-thread系统中如果采用软件定时器模式,则存在一定时器线程rt_thread_timer_entry,不断获取当前TICK值并与定时器链表rt_timer_list上的定时器对比判断是否时间已到,一旦发现就调用对应的回调函数,即事件处理函数进行处理,而如果采用硬件定时器管理模式的话,则该检查过程放到系统时钟中断例程中进行处理,此时,是不存在定时器线程的。如下图:注:如果采用软件定时器软件定时器,则该定时器链表为rt_soft_timer_list。

3 源码分析

3.1 数据定义

[cpp]view plaincopyprint?

1. /**

2. * timer structure

3. */

4. struct rt_timer

5. {

6. struct rt_object parent; //内核对象

7.

8. rt_list_t list; //链表节点

9.

10. void (*timeout_func)(void *parameter); //定时器超时例程

11. void *parameter; //定时器例程的传入参数

12.

13. rt_tick_t init_tick; //定时器的超时时间,即总共多长时间将产生超时事件

14. rt_tick_t timeout_tick; //定时器超时的时间点,即产生超时事件时那一该的时间

15. };

16. t ypedef struct rt_timer *rt_timer_t;

3.2 rt-thread的软件定时器模式

软件定时器线程初始化及启动:

[cpp]view plaincopyprint?

1. /**

2. * @ingroup SystemInit

3. *

4. * This function will initialize system timer thread

5. */

6. void rt_system_timer_thread_init(void)

7. {

8. #ifdef RT_USING_TIMER_SOFT//如果采用软件定时器管理模式,则启动定时器线程

9. rt_list_init(&rt_soft_timer_list);//初始化软件定时器链表

10.

11. /* start software timer thread */

12. rt_thread_init(&timer_thread,//初始化软件定时器线程,并启动

13. "timer",

14. rt_thread_timer_entry,

15. RT_NULL,

16. &timer_thread_stack[0],

17. sizeof(timer_thread_stack),

18. RT_TIMER_THREAD_PRIO,

19. 10);

20.

21. /* startup */

22. rt_thread_startup(&timer_thread);

23. #endif

24. }

软件定时器线程如下:

[cpp]view plaincopyprint?

1. /* system timer thread entry */

2. static void rt_thread_timer_entry(void *parameter)

3. {

4. rt_tick_t next_timeout;

5.

6. while (1)

7. {

8. /* get the next timeout tick */

9. next_timeout = rt_timer_list_next_timeout(&rt_soft_timer_list);//得到软件定时器链表

上的下一个定时器的超时时间点

10. if (next_timeout == RT_TICK_MAX)//如果超过范围,则挂起当前线程,继续线程调度

11. {

12. /* no software timer exist, suspend self. */

13. rt_thread_suspend(rt_thread_self());

14. rt_schedule();

15. }

16. else

17. {

18. rt_tick_t current_tick;

19.

20. /* get current tick */

21. current_tick = rt_tick_get();//获取当前时间点

22.

23. if ((next_timeout - current_tick) < RT_TICK_MAX/2)//离下个中断时间点还差些时

24. {

25. /* get the delta timeout tick */

26. next_timeout = next_timeout - current_tick;//计算还差多长时间

27. rt_thread_delay(next_timeout);//休眠一段时间

28. }

29. }

30.

31. /* lock scheduler */

32. rt_enter_critical();//时间到,进入临界区

33. /* check software timer */

34. rt_soft_timer_check();//检查是否该产生超时事件

35. /* unlock scheduler */

36. rt_exit_critical();//退出临界区

37. }

38. }

检查是否产生中断函数rt_soft_timer_check函数如下定义:

[cpp]view plaincopyprint?

1. /**

2. * This function will check timer list, if a timeout event happens, the

3. * corresponding timeout function will be invoked.

4. */

5. void rt_soft_timer_check(void)

6. {

7. rt_tick_t current_tick;

8. rt_list_t *n;

9. struct rt_timer *t;

10.

11. RT_DEBUG_LOG(RT_DEBUG_TIMER, ("software timer check enter\n"));

12.

13. current_tick = rt_tick_get();//得到当前时间点

14.

15. for (n = rt_soft_timer_list.next; n != &(rt_soft_timer_list);)//得到下一定时器节点

16. {

17. t = rt_list_entry(n, struct rt_timer, list);//t指向rt_timer定时器

18.

19. /*

20. * It supposes that the new tick shall less than the half duration of

21. * tick max.

22. */

23. if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2)//如果当前的时间点超过定时器

的超时时间点

24. {

25. RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook, (t));//使用钩子函数

26.

27. /* move node to the next */

28. n = n->next;//指向下一定时器

29.

30. /* remove timer from timer list firstly */

31. rt_list_remove(&(t->list));//移除当前定时器

32.

33. /* call timeout function */

34. t->timeout_func(t->parameter);//产生定时器超时事件,调用对应处理函数

35.

36. /* re-get tick */

37. current_tick = rt_tick_get();//再次获取当前时间点

38.

39. RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));

40.

41. if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) &&//如果当前定时器是周期性

定时器,则将其再次按序放入软件定时器链表

42. (t->parent.flag & RT_TIMER_FLAG_ACTIVATED))

43. {

44. /* start it */

45. t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;//置标志为非激活状态

46. rt_timer_start(t);//再次将定时器t放入软件定时器链表末尾

47. }

48. else

49. {

50. /* stop timer */

51. t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;//置标志为非激活状态

52. }

53. }

54. else break; /* not check anymore */

55. }

56.

57. RT_DEBUG_LOG(RT_DEBUG_TIMER, ("software timer check leave\n"));

58. }

上面代码中,为什么定时器里判断超时的条件是((current_tick - t→timeout_tick) < RT_TICK_MAX/2)?

因为系统时钟溢出后会自动回绕。取定时器比较最大值是定时器最大值的一半,即RT_TICK_MAX/2(在比较两个定时器值时,值是32位无符号数,相减运算将会自动回绕)。系统支持的定时器最大长度就是RT_TICK_MAX的一半:即248天(10ms/tick),124天(5ms/tick),24.5天(1ms/tick),以下内容相同道理。其上rt_timer_start函数如下定义:

[cpp]view plaincopyprint?

1. /**

2. * This function will start the timer

3. *

4. * @param timer the timer to be started

5. *

6. * @return the operation status, RT_EOK on OK, -RT_ERROR on error

7. */

8. rt_err_t rt_timer_start(rt_timer_t timer)

9. {

10. struct rt_timer *t;

11. register rt_base_t level;

12. rt_list_t *n, *timer_list;

13.

14. /* timer check */

15. RT_ASSERT(timer != RT_NULL);

16. if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)//如果传入的定时器已经激活,

则直接返回错误

17. return -RT_ERROR;

18.

19. RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(timer->parent)));//使用钩子函数

20.

21. /*

22. * get timeout tick,

23. * the max timeout tick shall not great than RT_TICK_MAX/2

24. */

25. RT_ASSERT(timer->init_tick < RT_TICK_MAX / 2);

26. timer->timeout_tick = rt_tick_get() + timer->init_tick;//得到定时器超时的时间点

27.

28. /* disable interrupt */

29. level = rt_hw_interrupt_disable();//关中断

30.

31. #ifdef RT_USING_TIMER_SOFT//如果采用的是软件定时器管理模式,则将定时器加入到

rt_soft_timer_list中

32. if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER)

33. {

34. /* insert timer to soft timer list */

35. timer_list = &rt_soft_timer_list;

36. }

37. else

38. #endif

39. {

40. /* insert timer to system timer list */

41. timer_list = &rt_timer_list;

42. }

43.

44. for (n = timer_list->next; n != timer_list; n = n->next)//将定时器按序加入到定时器链表

45. {

46. t = rt_list_entry(n, struct rt_timer, list);

47.

48. /*

49. * It supposes that the new tick shall less than the half duration of

50. * tick max.

51. */

52. if ((t->timeout_tick - timer->timeout_tick) < RT_TICK_MAX / 2)

53. {

54. rt_list_insert_before(n, &(timer->list));//将定时器timer插入到t之前

55. break;

56. }

57. }

58. /* no found suitable position in timer list */

59. if (n == timer_list)//没有找到合适的位置,则放到链表头

60. {

61. rt_list_insert_before(n, &(timer->list));

62. }

63.

64. timer->parent.flag |= RT_TIMER_FLAG_ACTIVATED;//置定时器为激活状态

65.

66. /* enable interrupt */

67. rt_hw_interrupt_enable(level);

68.

69. #ifdef RT_USING_TIMER_SOFT

70. if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER)//如果系统采用的是软件定时

器管理模式,且软件定时器线程处理ready状态,则恢复此线程

71. {

72. /* check whether timer thread is ready */

73. if (timer_thread.stat != RT_THREAD_READY)

74. {

75. /* resume timer thread to check soft timer */

76. rt_thread_resume(&timer_thread);//恢复定时器线程

77. rt_schedule();//开始线程调度

78. }

79. }

80. #endif

81.

82. return -RT_EOK;

83. }

软件定时器管理模式的源码分析完了,接下来介绍RTT的硬件定时器管理模式。

3.3 RTT的硬件定时器管理模式

硬件定时器管理模式顾名思义,就是说与硬件相关,因此,不用的MCU,其部分源码是不一样的,因为其要采用MCU的系统时钟中断例程来实现。

以STM32F2XX为例,先找到其启动汇编,位置在:

RTT/bsp/stm32f2xx/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F2xx/startup/arm/startup_stm32f2 xx.s

找到中断向量:

[plain]view plaincopyprint?

1. DCD SysTick_Handler ; SysTick Handler

这是系统时钟中断向量,再找到其中断例程实现:

在bsp/stm32f2xx/drivers/board.c文件中:

[cpp]view plaincopyprint?

1. /**

2. * This is the timer interrupt service routine.

3. *

4. */

5. void SysTick_Handler(void)//系统时钟中断例程

6. {

7. /* enter interrupt */

8. rt_interrupt_enter();

9.

10. rt_tick_increase();

11.

12. /* leave interrupt */

13. rt_interrupt_leave();

14. }

其中rt_tick_increase函数在RTT/src/clock.c文件中的实现如下:

[cpp]view plaincopyprint?

1. /**

2. * This function will notify kernel there is one tick passed. Normally,

3. * this function is invoked by clock ISR.

4. */

5. void rt_tick_increase(void)

6. {

7. struct rt_thread *thread;

8.

9. /* increase the global tick */

10. ++ rt_tick;//全局rt_tick加1

11.

12. /* check time slice */

13. thread = rt_thread_self();//得到当前正在运行的线程

14.

15. -- thread->remaining_tick;//纯种剩下时间减1

16. if (thread->remaining_tick == 0)//如果线程剩余时间为0,即调度时间已到

17. {

18. /* change to initialized tick */

19. thread->remaining_tick = thread->init_tick;//将线程剩余时间重新设置初始化值

20.

21. /* yield */

22. rt_thread_yield();//调度时间到,切换到其它线程

23. }

24.

25. /* check timer */

26. rt_timer_check();//检查硬件定时器链表是否有定时器产生超时事件

27. }

其中rt_timer_check函数在RTT/src/timer.c文件中如下定义:

[cpp]view plaincopyprint?

1. /**

2. * This function will check timer list, if a timeout event happens, the

3. * corresponding timeout function will be invoked.

4. *

5. * @note this function shall be invoked in operating system timer interrupt.

6. */

7. void rt_timer_check(void)

8. {

9. struct rt_timer *t;

10. rt_tick_t current_tick;

11. register rt_base_t level;

12.

13. RT_DEBUG_LOG(RT_DEBUG_TIMER, ("timer check enter\n"));

14.

15. current_tick = rt_tick_get();

16.

17. /* disable interrupt */

18. level = rt_hw_interrupt_disable();

19.

20. while (!rt_list_isempty(&rt_timer_list))

21. {

22. t = rt_list_entry(rt_timer_list.next, struct rt_timer, list);

23.

24. /*

25. * It supposes that the new tick shall less than the half duration of

26. * tick max.

27. */

28. if ((current_tick - t->timeout_tick) < RT_TICK_MAX/2)

29. {

30. RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook, (t));

31.

32. /* remove timer from timer list firstly */

33. rt_list_remove(&(t->list));

34.

35. /* call timeout function */

36. t->timeout_func(t->parameter);

37.

38. /* re-get tick */

39. current_tick = rt_tick_get();

40.

41. RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));

42.

43. if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) &&

44. (t->parent.flag & RT_TIMER_FLAG_ACTIVATED))

45. {

46. /* start it */

47. t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;

48. rt_timer_start(t);

49. }

50. else

51. {

52. /* stop timer */

53. t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;

54. }

55. }

56. else

57. break;

58. }

59.

60. /* enable interrupt */

61. rt_hw_interrupt_enable(level);

62.

63. RT_DEBUG_LOG(RT_DEBUG_TIMER, ("timer check leave\n"));

64. }

此函数与rt_soft_timer_check基本大致相同,只不过一个是查找硬件定时器链表rt_timer_list,一个是查找rt_soft_timer_list.

在此,硬件定时器管理模式基本上介绍完毕,接下来介绍一些定时器接口.

4 定时器接口

4.1 定时器初始化

静态初始化定义器

[cpp]view plaincopyprint?

1. /**

2. * This function will initialize a timer, normally this function is used to

3. * initialize a static timer object.

4. *

5. * @param timer the static timer object

6. * @param name the name of timer

7. * @param timeout the timeout function

8. * @param parameter the parameter of timeout function

9. * @param time the tick of timer

10. * @param flag the flag of timer

11. */

12. v oid rt_timer_init(rt_timer_t timer,

13. const char *name,

14. void (*timeout)(void *parameter),

15. void *parameter,

16. rt_tick_t time,

17. rt_uint8_t flag)

18. {

19. /* timer check */

20. RT_ASSERT(timer != RT_NULL);

21.

22. /* timer object initialization */

23. rt_object_init((rt_object_t)timer, RT_Object_Class_Timer, name);//初始化内核对象

24.

25. _rt_timer_init(timer, timeout, parameter, time, flag);

26. }

_rt_timer_init函数如下定义:

[cpp]view plaincopyprint?

1. static void _rt_timer_init(rt_timer_t timer,

2. void (*timeout)(void *parameter),

3. void *parameter,

4. rt_tick_t time,

5. rt_uint8_t flag)

6. {

7. /* set flag */

8. timer->parent.flag = flag;//置flag

9.

10. /* set deactivated */

11. timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;//初始化时,设置为非激活状

12.

13. timer->timeout_func = timeout;//设置超时事件处理函数

14. timer->parameter = parameter;//超时事件处理函数的传入参数

15.

16. timer->timeout_tick = 0;//定时器的超时时间点初始化时为0

17. timer->init_tick = time;//置超时时间

18.

19. /* initialize timer list */

20. rt_list_init(&(timer->list));//初始化本身节点

21. }

动态创建定时器

[cpp]view plaincopyprint?

1. /**

2. * This function will create a timer

3. *

4. * @param name the name of timer

5. * @param timeout the timeout function

6. * @param parameter the parameter of timeout function

7. * @param time the tick of timer

8. * @param flag the flag of timer

9. *

10. * @return the created timer object

11. */

12. r t_timer_t rt_timer_create(const char *name,

13. void (*timeout)(void *parameter),

14. void *parameter,

15. rt_tick_t time,

16. rt_uint8_t flag)

17. {

18. struct rt_timer *timer;

19.

20. /* allocate a object */

21. timer = (struct rt_timer *)rt_object_allocate(RT_Object_Class_Timer, name);//动态分配

定时器内核对象

22. if (timer == RT_NULL)

23. {

24. return RT_NULL;

25. }

26.

27. _rt_timer_init(timer, timeout, parameter, time, flag);//调用上述的初始化接口

28.

29. return timer;

30. }

4.2 脱离和删除

脱离:

[cpp]view plaincopyprint?

1. /**

2. * This function will detach a timer from timer management.

3. *

4. * @param timer the static timer object

5. *

6. * @return the operation status, RT_EOK on OK; RT_ERROR on error

7. */

8. rt_err_t rt_timer_detach(rt_timer_t timer)

9. {

10. register rt_base_t level;

11.

12. /* timer check */

13. RT_ASSERT(timer != RT_NULL);

14.

15. /* disable interrupt */

16. level = rt_hw_interrupt_disable();//关中断

17.

18. /* remove it from timer list */

19. rt_list_remove(&(timer->list));//从定时器链表中移除

20.

21. /* enable interrupt */

22. rt_hw_interrupt_enable(level);//开中断

23.

24. rt_object_detach((rt_object_t)timer);//脱离内核对象

25.

26. return -RT_EOK;

27. }

删除动态创建的定时器

[cpp]view plaincopyprint?

1. /**

2. * This function will delete a timer and release timer memory

3. *

4. * @param timer the timer to be deleted

5. *

6. * @return the operation status, RT_EOK on OK; RT_ERROR on error

7. */

8. rt_err_t rt_timer_delete(rt_timer_t timer)

9. {

10. register rt_base_t level;

11.

12. /* timer check */

13. RT_ASSERT(timer != RT_NULL);

14.

15. /* disable interrupt */

16. level = rt_hw_interrupt_disable();//关中断

17.

18. /* remove it from timer list */

19. rt_list_remove(&(timer->list));//从定时器链表中移除

20.

21. /* enable interrupt */

22. rt_hw_interrupt_enable(level);//开中断

23.

24. rt_object_delete((rt_object_t)timer);//删除动态创建的定时器内核对象

25.

26. return -RT_EOK;

27. }

4.3 启动定时器

[cpp]view plaincopyprint?

1. /**

2. * This function will start the timer

3. *

4. * @param timer the timer to be started

5. *

6. * @return the operation status, RT_EOK on OK, -RT_ERROR on error

7. */

8. rt_err_t rt_timer_start(rt_timer_t timer)

此接口已在上面介绍软件定时器模式时已有分析,这里就不再重复了。

4.4 停止定时器

[cpp]view plaincopyprint?

1. /**

2. * This function will stop the timer

3. *

4. * @param timer the timer to be stopped

5. *

6. * @return the operation status, RT_EOK on OK, -RT_ERROR on error

7. */

8. rt_err_t rt_timer_stop(rt_timer_t timer)

9. {

10. register rt_base_t level;

11.

12. /* timer check */

13. RT_ASSERT(timer != RT_NULL);

14. if (!(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED))//如果定时器已经为非激活状

15. return -RT_ERROR;

16.

17. RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(timer->parent)));//使用钩子函数

18.

19. /* disable interrupt */

20. level = rt_hw_interrupt_disable();//关中断

21.

22. /* remove it from timer list */

23. rt_list_remove(&(timer->list));//从定时器链表中移除

24.

25. /* enable interrupt */

26. rt_hw_interrupt_enable(level);//开中断

27.

28. /* change stat */

29. timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;//置非激活状态

30.

31. return RT_EOK;

32. }

4.5 控制

此接口是用来修改一个定时器的参数,如下代码:

[cpp]view plaincopyprint?

1. /**

2. * This function will get or set some options of the timer

3. *

4. * @param timer the timer to be get or set

5. * @param cmd the control command

6. * @param arg the argument

7. *

8. * @return RT_EOK

9. */

10. r t_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void *arg)

11. {

12. /* timer check */

13. RT_ASSERT(timer != RT_NULL);

14.

15. switch (cmd)

16. {

17. case RT_TIMER_CTRL_GET_TIME://获取时间参数

18. *(rt_tick_t *)arg = timer->init_tick;

19. break;

20.

21. case RT_TIMER_CTRL_SET_TIME://修改时间参数

22. timer->init_tick = *(rt_tick_t *)arg;

23. break;

24.

25. case RT_TIMER_CTRL_SET_ONESHOT://修改定时器模式为单次触发定时器

26. timer->parent.flag &= ~RT_TIMER_FLAG_PERIODIC;

27. break;

28.

29. case RT_TIMER_CTRL_SET_PERIODIC://修改定时器为周期触发定时器

30. timer->parent.flag |= RT_TIMER_FLAG_PERIODIC;

31. break;

32. }

33.

34. return RT_EOK;

35. }

超市商品管理信息系统数据库设计说明

二、需求分析: (一)主要目标 为了大大提高超市的运作效率,降低经营成本,提高效益,以及提升超市的管理水平。根据超市的需要,对其进行规化管理,因此需要一套合理的管理体系。 (二)功能分析 1、录入产品信息,并对其进行分类,能够对现有产品的信息进行维护、当产生了新产品后,能够录入新产品的信息; 2、能够输入员工、供应商的相关信息并能对其更新; 3、在收银处,随时录入商品出货信息(包括产品编号、出货单价、出货数量、员工编号等),及时更新数据库数据; 4、从供应商处进货后,及时录入产品进货信息(包括产品编号、进货单价、进货数量、供应商编号等); 5、录入产品原始库存,并能够根据产品进货、出货信息进行库存管理、更新; 6、可随时查询产品信息、出货信息、进货信息(如月出货报表),并可以打印输出; 7、能够根据出货、进货表中的数据自动计算出每种产品的当日库存,并能够实现当前库存查询; 8、在需要时生成商品库存情况报告,实时报告商品库存情况:库存量不足(小于某一自定的数量)时,可生成缺货报告,并提供商品种类,来源等信息,方便采购人员进行商品采购;库存量超额(大

于某一自定的数量)时,可生成超额库存报告,以便管理人员进行产品组合的协调; 9、商品出货达到一定数量时,可将此类商品信息及出货进货信息打印输出,能够提示畅销产品和滞销产品的种类,并提供商品的库存信息用于市场导购和商品采购指导。 (三)数据定义 图1.1 E-R图

(四)系统设计 1、商品管理:录入现有商品的相关信息,如生产日期、保质期、进货价格、出货价格等,并将其进行分类,以便查询、维护、更新; 2、进货管理:录入进货相关信息,并进行查询、更新,可打印输出; 3、出货管理:记录出货相关信息,并进行查询、更新,可打印输出; 4、库存管理:根据进货、出货信息自动计算库存量,并存储商品库存信息,且可以随时打印输出需要的产品库存信息; 5、员工信息管理:员工基本信息的创建、更新、查询; 6、供应商信息管理:供应商基本信息的创建、更新、查询。

c语言学生成绩管理系统含源代码

C 语言程序设计作业 一设计项目:学生成绩管理系统 二总体设计: 2:模块功能说明: 1 输入功能:输入学生姓名学号及成绩。 2 查看功能:输出姓名学号及各科成绩。 3 查询功能:通过学号查询学生姓名及各科成绩。 4 统计功能:统计班级学生及格率,优秀率,各个学生成绩方差等。 5 修改功能:通过输入学号修改指定学生的错误信息。 6添加功能:添加学生信息。 7删除功能:通过输入学号输入指定学生信息。 8保存功能:将学生信息保存。 9 退出系统。 3:主要函数之间的调用关系及各自功能: 主要函数的函数原型 void inputscore(void); void savescore(void); void avergescore(void); void modifyscore(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void); void modify(void);

void delscore(void); void menu(void); i.在菜单界面输入1,调用函数inputscore( )实现输入学生成绩信息功能。ii.在菜单界面2,调用函数lookscore( )实现学生成绩按平均分高低排序输。 出,同时lookscore()函数调用avergescore()函数实现各个学生平均分的计 算。 iii.在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能。 iv.在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方差,不及格学生名单。 v.在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能vi.在菜单界面输入6,调用add()函数实现添加学生成绩。 vii.在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。 viii.在菜单界面输入8,调用savescore()函数将学生成绩信息保存。 ix.在菜单界面输入9,退出成绩管理系统。

数据结构课程设计_职工信息管理系统_单链表实现程序源代码

//要求用C语言完成课程设计职工信息管理系统—单链表实现 #include #include #include int saveflag=0; /*是否需要存盘的标志变量*/ struct employee { char name[15]; char num[10];/* 工号 */ char sex[4]; char bm[15]; char zc[20]; int gz; }; typedef struct node { struct employee data; struct node *next; }Node,*Link; //Link l (注意是:字母l不是数字1) void add(Link l); void disp(Link l); //查看职工所有信息 void del(Link l); //删除功能 Node* Locate(Link l,char findmess[],char nameornum[]); void Qur(Link l); //查询功能 void Tongji(Link l); //统计 void Sort(Link l); //排序 void Modify(Link l); //修改功能 void save(Link l); //将单链表l中的数据写入文件 void printe(Node *p); //本函数用于打印链表中某个节点的数据内容 */ //以下4个函数用于输出中文标题 void printstart(); void Wrong(); void Nofind(); void printc();

【EAM资产管理】金蝶EAS系统功能说明书资产管理

【EAM资产管理】金蝶EAS系统功能说明书资产管理

大客户事业本部—EAS产品市场部

目录 第1章前言 (1) 1.1. 适用范围 (1) 1.2. 编写目的 (1)

第2章金蝶EAS资产管理系统 (2) 2.1系统概述 (2) 2.2系统结构 (2) 2.3功能说明 (3) 2.3.1固定资产管理 (3) 2.3.2低值易耗品管理 (4)

第1章前言 1.1.适用范围 本文档适用于售前项目进行中,客户为了解金蝶EAS集团资产管理系统的业务功能模块或为了制作标书,而提交的产品功能列表清单。 所有功能模块是从业务角度进行总体说明,从产品功能角度进行详细说明。希望能够给客户介绍系统全面功能。 温馨提醒:本文档不建议轻易提交给客户,防止流传到竞争对手或与客户的业务符合度有差异。 1.2.编写目的 ?让售前人员能够快速提交给客户产品功能模块列表; ?为售前人员制作标书或投标方案提供具体内容; ?方便售前人员快速、全面、系统的学习产品业务和功能。

第2章金蝶EAS资产管理系统 2.1系统概述 EAS资产管理系统包括固定资产管理和低值易耗品管理两大部分。它既能由财务部门使用,完成资产核算工作,又能由资产管理部门使用,帮助完成对资产的管理工作。 EAS固定资产管理系统提供处理固定资产的卡片管理、计提折旧、账务核算等,除实现设备的日常核算功能外,还提供固定资产管理功能,包括固定资产抵押,固定资产租赁,固定资产减值,固定资产维修,实现固定资产全生命周期管理。 EAS低值易耗品管理系统提供处理低值易耗品新增,低值易耗品领用,低值易耗品摊销,低值易耗品报废,低值易耗品变更等低值易耗品管理功能。并提供与总账系统接口。 2.2系统结构 EAS资产管理系统包括基础设置、初始化、业务处理、期末处理、报表统计等,其整体结构如下: 图表金蝶EAS固定资产系统结构图

中小型超市信息管理系统li

中小型超市信息管理系统 ——数据库设计文档一、需求分析

(一)项目背景 1.随着人们生活水平的提高,消费水平也随之提高,因此中小型超市凭着其方便,快捷的特点,已经越来越深入人们的市场生活,是人们每天消费的重要场所。目前超市商品管理系统已经在大中小型的超市中得到了广泛的应用,超市管理需要现代化和信息化,只有合理的运用信息化的管理,才能在市场竞争中立于不败。超市管理系统不仅能够提高经营者的回报,而且能够随时掌握市场的动向,为经营者提供必要的市场信息,解决了经营者最需要解决的迫切问题,同时超市管理系统对操作人员的要求不高,也合理的节约了成本的投入。 2. 系统功能及特点简介: 我们的“中小型超市商品信息管理系统”是专门针对中小型超市日常商品管理而开发的通用性,实用性很强的管理系统。不仅集进货、库存、销售于一体,同时还集成了报表打印、查询统计、库存分析、库存预警等多种实用的功能,实现了对商品的全面管理。我们设计这个系统的目的是开发一个简单实用的,界面整洁的,和谐友善的管理系统。任何没有计算机使用技能的人都能快速掌握其使用。 3. 数据采集 系统中数据主要来源: (1)商品进货的记录信息 (2)商品库存信息 (3)商品销售的记录信息 (4)供应商信息 (5)超市工作人员信息 (6)消费者相关信息 (二)系统流程: 1.在商品模块中可以查看和修改商品的基本信息,如商品的进货,售货和商品存入仓库的情况等; 2.在员工模块中可以查看和修改员工的基本信息,如员工姓名,住址,工资,工作日的作息时间等; 3.在财务模块中可以查看和修改超市的消费,支出,获得的利润等; 4.在顾客模块中可以查看和修改消费者消费的基本信息,如办理会员卡的顾客信息,以及顾客对超市的意见反馈等。

简单的JAVA员工信息管理系统源码

简单的J A V A员工信息 管理系统源码 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

据库连接 3.查询 4.增、5删 6改(操作数据库) import .*; public class EmpManageSys implements ActionListener { Connection con; Statement stmt; String sql; ResultSet rs; StringBuffer sb = new StringBuffer(); JTextField jtf2 = new JTextField("张飞",10); JTextField jtf3 = new JTextField(10); JTextField jtf4 = new JTextField(10); JTextField jtf7 = new JTextField(10); JTextField jtf5 = new JTextField(10); JTextField jtf6 = new JTextField(10); JTextField jtf8 = new JTextField(10); JTextField jtf9 = new JTextField(10); JTextArea jta10 = new JTextArea(50, 40); public void actionPerformed(ActionEvent e) { String str = (); if ("查询".equals(str)) { quals(str)) { quals(str)) { quals(str)) { EmpManageSys() { createGUI(); connectToDataBase(); } public void searchEmp() { (""); try { stmt = (); oLowerCase().trim() + "or id=" + ().toLowerCase().trim() + "or engName=" + ().toLowerCase().trim() + "or UNIT=" + ().toLowerCase().trim() + "or TEAM=" + ().toLowerCase().trim() + "or Phone=" + ().toLowerCase().trim() + "or region=" + ().toLowerCase().trim() + "or busStation=" + ().toLowerCase().trim();

学生成绩管理系统源代码

学生成绩管理系统源代码-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

#include #include #include #include #include #include #include #include #define PRINT1 textcolor(12); cprintf("\r 请按任意键返回主菜单 \n\r");textcolor(10); getch();clrscr(); break; int shoudsave=0; struct student /* 学生信息结构体定义*/ { char num[10],name[20],cla[4]; int score1,score2,score3,total,ave; }; typedef struct node { struct student data; struct node *next; }Node,*L; void print1() { cprintf("\r============================================================= ==================="); } void print2() { cprintf("\n\r 1.输入学生成绩信息在这里你可以按照提示输入学生的班级,学号,姓名及各科成绩.\n"); cprintf("\n\r 2.注销学生成绩信息在这里你可以按照学号或姓名将某名学生的信息从本系统中删除.\n"); cprintf("\n\r 3.查询学生成绩信息在这里你可以按照学号或姓名查询某一名学生的信息.\n"); cprintf("\n\r 4.修改学生成绩信息在这里你可以按照提示修改某一名学生的学号,姓名及各科成绩."); cprintf("\n\r 5.学生成绩信息排序在这里你可以看到所有学生的各科成绩.\n"); cprintf("\n\r 6.学生成绩信息统计在这里本系统将为你显示所有科目的最高分及最低分所得学生.\n"); cprintf("\n\r 7.显示学生成绩信息在这里你可以看到系统中所有学生的信 息.\n"); cprintf("\n\r 8.保存学生成绩信息在这里你可以将学生你信息保存到内存 中.\n");

职工信息管理系统java源代码

package exercise; import .*; class staffInfo 入职工信息★★★┃"); "┃★★★ 2.预览职工信息 ★★★┃"); "┃★★★ 3.查找职工信息 ★★★┃"); "┃★★★ 4.删除职工信息 ★★★┃"); "┃★★★ 5.读取已存数据★★★┃"); "┃★★★ 6.安全退出系统 ★★★┃"); "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"); " 请输入您需要的功能代号(1--6):"); choice=()); switch(choice){ case 1:creat(staffOne);break; case 2:output(staffOne);break; case 3:search(staffOne);break; case 4:delete(staffOne);break; case 5:read(staffOne);break; case 6:save(staffOne);break; } } while(choice!=0); } void creat(staffInfo staffOne[]) throws IOException { final BufferedReader buf=new BufferedReader(new InputStreamReader); "请输入职工信息(以0结束)\n"); "姓名:"); staffOne[i].name=(); "0")!=0) um=(); "性别:"); staffOne[i].sex=(); "年龄:"); staffOne[i].age=(); "学历:"); staffOne[i].record=(); "职位:"); staffOne[i].position=(); "工资:"); staffOne[i].wanges=(); "电话:");

JSP商品信息管理系统.

设计说明书 设计题目数码商品信息管理系统 完成日期 2016年 6 月30 日 专业班级计算机15本 设计者赵成 指导教师张冬姣

前言 数码商品信息管理系统是生活系统建设的重要组成部分,是提高生活水平的质量和效益的关键环节。数码商品信息处理的电脑化、网络化,也是实现数码产品管理现代化和信息化的重要内容。 数码商品信息管理系统的内容对于消费者的决策者和管理者来说都至关重要, 所以数码商品信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理,这种管理方式存在着许多缺点,如:效率低,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对商品信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高数码商品管理的效率,也是进行科学化、正规化管理,与世界接轨的重要条件。 随着进入二十一世纪,计算机技术迅速向着网络化、集成化方向发展。传统的单机版应用软件正在逐渐退出舞台,取而代之的是支持网络、支持多种数据信息(多媒体)的新一代网络版应用软件,而目前网络版软件中似乎存在着两种不同的趋势,一种是称为客户端——服务器的C/S 结构应用系统,另一种是称为浏览器——服务器的B/S结构应用系统。而后者的特点是在客户端直接采用了功能强大的浏览器软件作为界面,

其优点在于软件开发效率高,客户端不受操作平台的限制、也不受地域的限制,网络传输量少,即适用于局域网,更适用于Internet,而且投资小、见效快,用户可以不必进行服务器方面的投资,而是去租用,甚至是免费使用ISP的服务器资源,因而受到越来越多中小型单位的青睐。 因此,开发一套采用B/S结构的数码商品信息管理系统就成为必要的事情。本系统正是采用B/S结构开发的,该系统主要由商品信息添加,商品信息查询,商品信息修改和商品信息删除等功能模块组成,实现数码商品信息管理。本文将在后面一一加以详细阐述。

职工信息管理系统C语言源代码

#include #include #include #define N 100 struct employee { int num; char name[20]; char sex; int age; char xueli[30]; int wage; char addr[30]; char tel[20]; }em[100]; /*定义一个结构体*/ void menu(); void input(); void save(int); void display(); void del(); void add(); void search(); void search_num(); void search_xueli(); void search_tel(); void modify(); /*定义各函数*/ void main() {menu(); int n,flag; char a; do { printf("请选择你需要操作的步骤(1--7):\n"); scanf("%d",&n); if(n>=1 && n<=7) { flag=1; break; } else { flag=0; printf("您输入有误,请重新选择!"); }

} while(flag==0); while(flag==1) {switch(n) {case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break; case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break; case 3:printf(" ◆◆◆按职工号查询职工信息◆◆◆\n");printf("\n");search();break; case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break; case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break; case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break; case 7:exit(0);break; default :break; } getchar(); printf("\n"); printf("是否继续进行(y or n):\n"); scanf("%c",&a); if(a=='y') {flag=1; system("cls"); /*清屏*/ menu(); /*调用菜单函数*/ printf("请再次选择你需要操作的步骤(1--7):\n"); scanf("%d",&n); printf("\n"); } else exit(0); } } void menu() /*菜单函数*/ { printf(" ************欢迎进入职工信息管理系统**********\n"); printf(" 1.录入职工信息"); printf(" 2.浏览职工信息\n"); printf(" 3.查询职工信息"); printf(" 4.删除职工信息\n"); printf(" 5.添加职工信息");

金蝶K3固定资产清理操作流程

金蝶 K/3 固定资产清理操作流程 一、打开【财务会计】-【固定资产管理】-【业务处理】-【变动处理】,选中需要清理的固定资产卡片,点击菜单【变动】-【清理】 二、“固定资产清理-新增”界面,分别录入清理数量、清理费用、残值收入(不含税)、适用税率、销项税额,从变动方式中选中固定资产减少的方式,录入摘要,点击【保存】,弹出金蝶提示点击【确定】退出。 注意:当期已经变动的资产不能清理,需将变动记录删除后才可清理。

三、删除固定资产清理记录 1、打开【财务会计】-【固定资产管理】-【业务处理】-【变动处理】,选中本期已经清理的固定资产卡片变动记录,点击菜单【变动】-【清理】,弹出对话框点击【是】。 2、在“固定资产清理-编辑”界面,点击【删除】,弹出对话框点击【是】,即可删除清理记录。 注:已经生成凭证的清理记录,要先删除凭证才能删除清理记录。 四、生成凭证 打开【财务会计】-【固定资产管理】-【凭证管理】-【卡片凭证管

理】,通过过滤方案进入后,选中需要生成凭证的记录,点击菜单【编辑】-【按单生成凭证】或【汇总生成凭证】 点击【开始】, 点击【是】,手动调整生成的凭证,修改完凭证后点保存。 五、删除或修改已经生成的固定资产凭证 打开【财务处理】-【固定资产管理】-【凭证管理】-【卡片凭证管理】,通过过滤方案进入后,选中已生成凭证的记录,点击菜单【编辑】-【修改凭证】或【删除凭证】,可以对已生成但尚未过账、审核的固定资产凭证进行删除。

固定资产批量清理的操作说明 固定资产批量清理的操作说明 如果当期对多项固定资产进行了清理,且清理的方式一样,则为提高工作效率,可以利用系统提供的“批量清理”的功能,一次对多个固定资产进行清理。操作方法说明如下: 1. 在“卡片管理”列表中,按住Shift键或Ctrl键,用鼠标单击选择多条需要清理的卡片,单击【变动】→【批量清理】,弹出“批量清理”界面; 2. 在“批量清理”界面中,录入每项固定资产的清理数量、残值收入(不含税)、适用税率、销项税额、清理费用,并在变动方式中选择清理的方式后,单击【确定】即可完成批量清理。

超市商品信息管理系统

超市商品信息管理系统 第一章系统功能需求分析 1.1需求分析的任务 其主要解决的问题: ●信息要求:用户希望从数据库中获取什么数据,并由此决定在数据库中 存储哪些数据。 ●处理要求:明确用户对数据有什么样的处理要求,从而确定数据之间的 相互关系。 ●安全性与完整性要求:确定用户的最终需求是一件很困难的事情,用户 缺少计算机知识,不能准确表达自己的需求,所提出的需求往往经常变 化。设计人员缺少用户的专业知识,不易理解用户的真正需求。因此在 需求分析阶段要求客户的广泛参与,设计人员也要去熟悉客户的业务工 作,才能逐步确定用户的实际需求。 1.2 商品信息管理系统的需求分析 商品信息管理系统是一个基于超市内部商品档案的管理工具,以实现信息共享、规范管理。此商品信息管理系统完成以下主要任务: ●商品基本档案维护(新建、查询、删除、修改) ●商品基本档案的数据检索 ●系统用户的信息(管理员、普通用户的权限)

1.3商品信息管理系统的业务流程图 如图3-2所示 业务部门新品上架需求系统操作人员 填写商品信息处理表 显示已建立的商品信息 查询数据库 建立系统新商品的基本档案 使用标准信息进行业务销售管理 显示已建立的商品信息 使用标准信息进行业务销售管理 图3-2 商品信息管理系统业务流程图

第二章系统分析与设计 2.1系统功能模块设计 2.1.1商品信息管理系统功能模块图 商品信息管理系统主要实现的是档案数据的查询功能,它采用模块化程序设计,共有三大主要功能模块 I.数据维护 ●对三大基本档案信息(供应商、品牌、单品)进行新建、删除、查 询、更新的维护 ●对商品分类信息分类进行数据维护 II.数据检索 ●对供应商档案的查询,提供按供应商主档查询、按单品查找和按品 牌查找供应商主档信息,并提供排序功能 ●对品牌查询,提供按品牌主档查询和按供应商查找品牌主档信息和 合作信息,并提供排序功能 ●对单品查询,提供按单品主档查询和供应商查找单品主档信息和合 作信息,并提供排序功能 III.报表处理 ●按不同的检索条件产生不同的主档信息 2.2数据库设计 2.2.1E-R模型 1.实体关系E-R图 如图4-2所示

用java编写的学生成绩管理系统代码

; public class Student { private String id; private String name; private int math; private int english; private int java; private int computer; public String getId() { return id; } public void setId(String id) { = id; } public String getName() { return name; } public void setName(String name) {

= name; } public int getMath() { return math; } public void setMath(int math) { = math; } public int getEnglish() { return english; } public void setEnglish(int english) { = english; } public int getJava() { return java; } public void setJava(int java)

{ = java; } public int getComputer() { return computer; } public void setComputer(int computer) { = computer; } public static void main(String[] args) throws Exception { String id; String cid; String name; int math; int english; int java; int computer; String DBDriver = ""; String conStr = "jdbc:odbc:student"; Connection con = null; Statement stmt = null; ResultSet rs = null;

简单的JAVA员工信息管理系统源码

// 项目目标:建立员工管理系统第一个版本。 // 实现图形用户界面的员工信息查询、增、删、改;与数据库建立,并将修改结果时时保存到数据库。 // 模块:1.GUI界面 2.数据库连接 3.查询 4.增、5删 6改(操作数据库) import java.sql.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EmpManageSys implements ActionListener { Connection con; Statement stmt; String sql; ResultSet rs; StringBuffer sb = new StringBuffer(); JTextField jtf2 = new JTextField("张飞",10); JTextField jtf3 = new JTextField(10); JTextField jtf4 = new JTextField(10); JTextField jtf7 = new JTextField(10); JTextField jtf5 = new JTextField(10); JTextField jtf6 = new JTextField(10); JTextField jtf8 = new JTextField(10); JTextField jtf9 = new JTextField(10); JTextArea jta10 = new JTextArea(50, 40); public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); if ("查询".equals(str)) { //if check the button of 查询,then go to method of searchEmp() searchEmp(); } else if ("增加".equals(str)) {

金蝶固定资产条码盘点解决方案

金蝶 固定资产管理系统 设计方案 深圳市方左科技有限公司 编制:余尚森 二?一五年七月

1、资产管理系统需求分析 1.1资产管理系统为什么要引入条码管理? 资产管理是企业管理中的一个重要组成部分,它具有价值高,使用周期长、使用地点 分散、管理难度大等特点。由于资产使用地点分散的特点,即使在管理系统的支持下,资 产标签的制定、填写或打印、粘贴、资产状态的跟踪,盘点等工作的性质和工作量并没有 得到良好的改变和改进,资产管理依然是手工和计算机管理相结合。许多企业在固定资产 管理过程中也许都遇到过以下所列的问题: (1) 资产使用状况跟踪不及时 -- -不能准确反映资产使用流向及资产状态。 (2) 资产的统计工作进行困难 -- —导致资产使用效率不咼。 (3) 繁重的盘点工作,耗时耗力 ----信息反映不及时,影响了企业的运营效率,导致资 产重复购置。 在充分研究分析企业固定资产管理的业务需求的基础上, 库尔勒行软公司提供的资产 管理系统,把条码、盘点技术引入资产管理,有效解决企业资产的管理难题,使企业更轻 松、更有效地管理资产。有效解决资产数据分散采集输入的瓶颈难题,这样才能将资产管 理系统的功能最大化地发挥出来。 (1) 通过接口将多种数据源系统中资产的数据导入条码系统或手动新增卡片信息,并打 印标签,使盘点 简便快捷,及时准确; (2) 提高工作效率,降低管理成本; 1.2如何把条码引入资产管理系统? (1)全自动生成唯一国际标准条码,打印资产条码标签 取消手工书写或普通打印机打印的资产标签。在原有资产编码的基础上,用条码符 号把资产编号表现出来,使用专用的条码打印机打印出特殊介质的资产标签。 专业的条码 打印机可以打印 PET PVC 等薄膜类特殊介质,因此可以选用防水、防油污、防撕裂的 PET 标签纸,保证资产标签长期保存和清晰。 (2) 将带有条码信息的标签粘贴在资产上

学生成绩管理系统(数据结构C语言版源代码)54843943

天天都是一个出发点,每天都有一点提高,每天都有一点收成! #include #include #include struct students{ char Sex[3]; /*字符型学生性别*/ double English; /*双精度实型英语成绩*/ double Java; /*双精度实型Java成绩*/ double Sjjg; /*双精度实数据结构*/ double Szdl; /*双精度实型数字电路*/ double Jsj; /*计算机组成原理*/ struct students *next; /*用与构建连表指向下一结点*/ }; FILE *fp; /*定义全局变量fp*/ void Revisemenu();/*修改菜单*/ void Sortmenu();/*排序菜单*/ void menu();/*主菜单*/ void secret();/*安全验证*/ struct students * Input();/*新建学生信息*/ void fprint(struct students *head);/*将信息导入文件可追加*/ void fprint_(struct students *head);/*将信息导入文件并覆盖*/ void Browse(struct students *head);/*浏览全部学生信息*/ struct students * create(struct students *head int *n);/*从tushu_list中读取数据构建链表*/ void SortEnglish(struct students * head);/*按英语成绩排序*/ void SortJava(struct students * head);/*按Java成绩排序*/ void SortSjjg(struct students * head);/*按数据结构成绩排序*/ void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/ void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/ struct students * Delete(struct students * head struct students * Revise();/*修改学生信息(按编号修改)*/ /*主菜单*/ void menu() { printf("\n\n"); printf("***************************************************\n"); printf(" 学生成绩管理系统 \n"); printf(" 1-添加新同学 2-浏览学生信息 \n"); printf(" 5-按成绩排序 6-修改学生信息 \n"); printf(" 7-删除学生信息 0-退出系统 \n"); printf("___________________________________________________\n");

商品信息管理系统

商品信息管理系统,要求采用结构体数组或文件形式存储每种商品的信息,每种商品包含:商品编号、商品名称、单价、生产地、本月当前销售总数量、本月当前销售总金额及库存余量等信息。软件组成包括主函数和下列5个功能模块:(1)售出功能(被售出之商品数量减x);(2)进货功能(被购进之商品数量增x);(3)查找功能(查找指定商品余存信息和价格信息);(4)统计功能(找出当前销售总金额最大的商品);(5)退出程序。用多文件原理。 头文件: #include #include #include #include #define Maxno 20 struct products { char num[10]; //商品编号 char name[10]; //商品名称 char place[10]; //生产地 double price; //单价 int gross; //本月当前销售总数量 double total; //本月当前销售总金额 int count; //库存余量 }pro[10]; int sum; //商品总类数 int menu_select(); //菜单选择 void product_info(struct products *); //商品信息 void sold(); //商品售出数量(被售出之商品数量减x) void purchase(); //商品进货数量(被购进之商品数量增x) void search(); //查找指定商品余存、价格信息 void Statistics(); //统计销售总金额最大的商品

c++职工信息管理系统课程设计说明书(带全部源码)

课程设计说明书 课程名称C++项目设计 设计题目企业人事信息管理系统学生姓名学号 专业计算机应用 指导教师李广松 2011 年06 月30日

目录 一、系统开发相关情况 (1) (一)开发背景 (1) (二)系统开发的目标 (1) 二、系统以及需求分析 (1) (一)系统目标 (1) (二)系统可行性分析 (1) 1、技术可行性分析 (1) 2、开发工具可行性分析 (2) 三、程序功能描述以及模块结构 (2) (一)功能模块描述及主要类描述 (2) (二)程序流程图 (3) (三)数据结构表 (4) 四、用户使用说明与调试结果 (4) (一)使用说明 (4) (二)调试结果 (4) (三)优缺点分析 (8) 五、总结 (8) 参考文献: (9) 附录:职工信息管理系统源码(C++) (9)

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。 本文介绍了在Microsoft Visual C++ 6.0环境下开发一个职工信息管理系统的过程。 本系统界面友好,操作简单,比较实用。 一、系统开发相关情况 (一)开发背景 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。 (二)系统开发的目标 为了更好地适应我校的要求,进一步提供全方位的信息服务,职工信息管理系统在实施后应该能够达到以下的目标: ★能够准确地记录职工的相关信息。 ★系统界面友好、操作简单易行,查询灵活方便,数据储存安全可靠。 ★系统维护安全、方便、可靠,并且能够实现实用性,先进性的要求。 二、系统以及需求分析 (一)系统目标 除了前面所述,我们所开发的系统还应该具有以下功能: ⑴原始数据修改简单方便; ⑵方便的数据查询; ⑶删除数据方便简单,稳定性好; ⑷数据计算自动完成,尽量减少人工干预; (二)系统可行性分析 1、技术可行性分析 由于本系统管理的对象单一,都是公司职工,所以涉及的计算过程不是很复

金蝶EAS固定资产操作手册

第5章固定资产 核算固定资产、抵债资产、无形资产等资产类别 5.1基础设置 本模块为基础设置,主要内容有各种固定资产基础资料的定义操作说明。 基础设置是指固定资产业务的背景资料及业务政策设置。本章主要讲述了金蝶EAS 固定资产系统在初始化前的基础资料如何进行设置。固定资产系统的基础设置是金蝶EAS固定资产业务进行业务操作的第一步,所以设置尤为重要。 在进行初始卡片录入之前,必须定义固定资产业务所需的若干基础资料,才能进行下一步操作。 从金蝶EAS的主界面,选择〖资产管理〗->〖固定资产〗->〖基础设置〗。如下图所示:

该模块用于设置系统基础数据。包括固定资产类别、使用状态、变动方式、经济用途、折旧方法、折旧政策、减值政策、模拟折旧方案、评估方法、评估方案、租赁类型、自定义统计类别、卡片项目默认值。 系统提供初始化数据引入模板,当存在大量初始化数据时,只需将初始化数据按照规定的格式录入到模板上,通过初始化数据引入功能,快速,准确地完成初始化数据的输入步骤,从而为完成初始化工作奠定良好的基础。 变动方式 固定资产变动方式是固定资产在进行新增、变更、清理、调拨、盘点等业务时,需要定义的资产变动的业务原因。变动方式定义主要包括变动方式的新增,修改,删除等功能。如下图所示:

新增 从金蝶EAS的主界面,选择〖资产管理〗->〖固定资产〗->〖基础设置〗->〖变动方式〗,选中某个节点,点击〖新增〗按钮,如下图所示:

界面属性列表说明: 属性类型说明和约束是否可 录入 是否必录 编码字符系统自动生成,编码要唯一;并符合编码规则 的定义 否否 名称字符不允许重复.控制在80个字符内是是 对方科目字符可输入科目编码,也可选择是是 集团控制级次字符用于指定集团控制变动方式的级次关系。只有 一级变动方式需要用户指定控制级次。非一级 变动方式自动继承上级变动方式的设置。选择 的数据范围为0-10的整数,系统默认为1。 是是 备注字符用户输入.控制在255个字符内是是 如果变动方式是集团定义的,则可以在界面上单击【】按钮引入上级定义好的数据。如下图所示:

相关主题
文本预览
相关文档 最新文档